1# $Id: Makefile,v 1.119 2014/11/26 10:42:03 nanard Exp $
2# MiniUPnP Project
3# http://miniupnp.free.fr/
4# http://miniupnp.tuxfamily.org/
5# https://github.com/miniupnp/miniupnp
6# (c) 2005-2014 Thomas Bernard
7# to install use :
8# $ make DESTDIR=/tmp/dummylocation install
9# or
10# $ INSTALLPREFIX=/usr/local make install
11# or
12# $ make install (default INSTALLPREFIX is /usr)
13
14include ../common.mak
15include ../.config
16
17OS = Linux
18VERSION = 2.6.36
19#OS = $(shell uname -s)
20#VERSION = $(shell cat VERSION)
21
22ifeq ($(OS), Darwin)
23JARSUFFIX=mac
24endif
25ifeq ($(OS), Linux)
26JARSUFFIX=linux
27endif
28ifneq (,$(findstring NT-5.1,$(OS)))
29JARSUFFIX=win32
30endif
31
32#HAVE_IPV6 ?= yes
33#export HAVE_IPV6
34
35#CC ?= gcc
36#AR = gar
37CFLAGS += -O2 -s
38#CFLAGS += -DDEBUG
39FLAGS ?= -O
40CFLAGS += -Wall
41CFLAGS += -W -Wstrict-prototypes
42CFLAGS += -fno-common
43CFLAGS += -DMINIUPNPC_SET_SOCKET_TIMEOUT
44CFLAGS += -DMINIUPNPC_GET_SRC_ADDR
45CFLAGS += -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112L
46#CFLAGS += -ansi
47# -DNO_GETADDRINFO
48#INSTALL = install
49SH = /bin/sh
50JAVA = java
51# see http://code.google.com/p/jnaerator/
52#JNAERATOR = jnaerator-0.9.7.jar
53#JNAERATOR = jnaerator-0.9.8-shaded.jar
54#JNAERATORARGS = -library miniupnpc
55#JNAERATOR = jnaerator-0.10-shaded.jar
56JNAERATOR = jnaerator-0.11-shaded.jar
57JNAERATORARGS = -mode StandaloneJar -runtime JNAerator -library miniupnpc
58JNAERATORBASEURL = http://jnaerator.googlecode.com/files/
59
60CFLAGS += -I$(TOP)/shared -I$(SRCBASE)/include
61LDFLAGS += -L$(TOP)/shared -lshared  -L$(TOP)/nvram${BCMEX} -lnvram
62
63ifeq ($(RTCONFIG_BCMARM),y)
64LDFLAGS += -lgcc_s
65endif
66
67ifeq ($(RTCONFIG_QTN),y)
68LDFLAGS += -L$(TOP)/libqcsapi_client -lqcsapi_client
69endif
70
71ifeq (SunOS, $(OS))
72  LDFLAGS=-lsocket -lnsl -lresolv
73endif
74
75# APIVERSION is used to build SONAME
76APIVERSION = 12
77
78SRCS = igd_desc_parse.c miniupnpc.c minixml.c minisoap.c miniwget.c \
79       upnpc.c upnpcommands.c upnpreplyparse.c testminixml.c \
80       minixmlvalid.c testupnpreplyparse.c minissdpc.c \
81       upnperrors.c testigddescparse.c testminiwget.c \
82       connecthostport.c portlistingparse.c receivedata.c \
83       testportlistingparse.c miniupnpcmodule.c \
84       minihttptestserver.c \
85       listdevices.c
86
87LIBOBJS = miniwget.o minixml.o igd_desc_parse.o minisoap.o \
88          miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \
89          connecthostport.o portlistingparse.o receivedata.o
90
91ifneq ($(OS), AmigaOS)
92CFLAGS := -fPIC $(CFLAGS)
93LIBOBJS := $(LIBOBJS) minissdpc.o
94endif
95
96OBJS = $(patsubst %.c,%.o,$(SRCS))
97
98# HEADERS to install
99HEADERS = miniupnpc.h miniwget.h upnpcommands.h igd_desc_parse.h \
100          upnpreplyparse.h upnperrors.h miniupnpctypes.h \
101          portlistingparse.h \
102          declspec.h
103
104# library names
105LIBRARY = libminiupnpc.a
106ifeq ($(OS), Darwin)
107  SHAREDLIBRARY = libminiupnpc.dylib
108  SONAME = $(basename $(SHAREDLIBRARY)).$(APIVERSION).dylib
109  CFLAGS := -D_DARWIN_C_SOURCE $(CFLAGS)
110else
111ifeq ($(JARSUFFIX), win32)
112  SHAREDLIBRARY = miniupnpc.dll
113else
114  # Linux/BSD/etc.
115  SHAREDLIBRARY = libminiupnpc.so
116  SONAME = $(SHAREDLIBRARY).$(APIVERSION)
117endif
118endif
119
120EXECUTABLES = upnpc-static listdevices
121EXECUTABLES_ADDTESTS = testminixml minixmlvalid testupnpreplyparse \
122			  testigddescparse testminiwget testportlistingparse
123
124TESTMINIXMLOBJS = minixml.o igd_desc_parse.o testminixml.o
125
126TESTMINIWGETOBJS = miniwget.o testminiwget.o connecthostport.o receivedata.o
127
128TESTUPNPREPLYPARSE = testupnpreplyparse.o minixml.o upnpreplyparse.o
129
130TESTPORTLISTINGPARSE = testportlistingparse.o minixml.o portlistingparse.o
131
132TESTIGDDESCPARSE = testigddescparse.o igd_desc_parse.o minixml.o \
133                   miniupnpc.o miniwget.o upnpcommands.o upnpreplyparse.o \
134                   minisoap.o connecthostport.o receivedata.o \
135                   portlistingparse.o
136
137ifneq ($(OS), AmigaOS)
138#EXECUTABLES := $(EXECUTABLES) upnpc-shared
139#TESTMINIWGETOBJS := $(TESTMINIWGETOBJS) minissdpc.o
140#TESTIGDDESCPARSE := $(TESTIGDDESCPARSE) minissdpc.o
141endif
142
143LIBDIR ?= lib
144# install directories
145INSTALLPREFIX ?= $(PREFIX)/usr
146INSTALLDIRINC = $(INSTALLPREFIX)/include/miniupnpc
147INSTALLDIRLIB = $(INSTALLPREFIX)/$(LIBDIR)
148INSTALLDIRBIN = $(INSTALLPREFIX)/bin
149INSTALLDIRMAN = $(INSTALLPREFIX)/share/man
150
151FILESTOINSTALL = $(LIBRARY) $(EXECUTABLES)
152ifneq ($(OS), AmigaOS)
153FILESTOINSTALL := $(FILESTOINSTALL) $(SHAREDLIBRARY)
154endif
155
156
157.PHONY:	install clean depend all check test everything \
158	installpythonmodule updateversion
159#	validateminixml validateminiwget
160
161all:	$(LIBRARY) $(EXECUTABLES)
162
163test:	check
164
165check:	validateminixml validateminiwget validateupnpreplyparse \
166	validateportlistingparse validateigddescparse
167
168everything:	all $(EXECUTABLES_ADDTESTS)
169
170pythonmodule:	$(LIBRARY) miniupnpcmodule.c setup.py
171	python setup.py build
172	touch $@
173
174installpythonmodule:	pythonmodule
175	python setup.py install
176
177pythonmodule3:	$(LIBRARY) miniupnpcmodule.c setup.py
178	python3 setup.py build
179	touch $@
180
181installpythonmodule3:	pythonmodule3
182	python3 setup.py install
183
184validateminixml:	minixmlvalid
185	@echo "minixml validation test"
186	./minixmlvalid
187	touch $@
188
189validateminiwget:	testminiwget minihttptestserver testminiwget.sh
190	@echo "miniwget validation test"
191	./testminiwget.sh
192	touch $@
193
194validateupnpreplyparse:	testupnpreplyparse testupnpreplyparse.sh
195	@echo "upnpreplyparse validation test"
196	./testupnpreplyparse.sh
197	touch $@
198
199validateportlistingparse:	testportlistingparse
200	@echo "portlistingparse validation test"
201	./testportlistingparse
202	touch $@
203
204validateigddescparse:	testigddescparse
205	@echo "igd desc parse validation test"
206	./testigddescparse testdesc/new_LiveBox_desc.xml testdesc/new_LiveBox_desc.values
207	./testigddescparse testdesc/linksys_WAG200G_desc.xml testdesc/linksys_WAG200G_desc.values
208	touch $@
209
210clean:
211	$(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) miniupnpcstrings.h
212	$(RM) $(EXECUTABLES_ADDTESTS)
213	# clean python stuff
214	$(RM) pythonmodule pythonmodule3
215	$(RM) validateminixml validateminiwget validateupnpreplyparse
216	$(RM) validateigddescparse
217	$(RM) minihttptestserver
218	$(RM) -r build/ dist/
219	#python setup.py clean
220	# clean jnaerator stuff
221	$(RM) _jnaerator.* java/miniupnpc_$(OS).jar
222
223distclean: clean
224	$(RM) $(JNAERATOR) java/*.jar java/*.class out.errors.txt
225
226updateversion:	miniupnpc.h
227	cp miniupnpc.h miniupnpc.h.bak
228	sed 's/\(.*MINIUPNPC_API_VERSION\s\+\)[0-9]\+/\1$(APIVERSION)/' < miniupnpc.h.bak > miniupnpc.h
229
230#install:	updateversion $(FILESTOINSTALL)
231#	$(INSTALL) -d $(DESTDIR)$(INSTALLDIRINC)
232#	$(INSTALL) -m 644 $(HEADERS) $(DESTDIR)$(INSTALLDIRINC)
233#	$(INSTALL) -d $(DESTDIR)$(INSTALLDIRLIB)
234#	$(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(INSTALLDIRLIB)
235#ifneq ($(OS), AmigaOS)
236#	$(INSTALL) -m 644 $(SHAREDLIBRARY) $(DESTDIR)$(INSTALLDIRLIB)/$(SONAME)
237#	ln -fs $(SONAME) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY)
238#endif
239#	$(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN)
240#ifeq ($(OS), AmigaOS)
241#	$(INSTALL) -m 755 upnpc-static $(DESTDIR)$(INSTALLDIRBIN)/upnpc
242#else
243#	$(INSTALL) -m 755 upnpc-shared $(DESTDIR)$(INSTALLDIRBIN)/upnpc
244#endif
245#	$(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip
246#ifneq ($(OS), AmigaOS)
247#	$(INSTALL) -d $(DESTDIR)$(INSTALLDIRMAN)/man3
248#	$(INSTALL) -m 644 man3/miniupnpc.3 $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3
249#ifeq ($(OS), Linux)
250#	gzip -f $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3
251#endif
252#endif
253
254
255cleaninstall:
256	$(RM) -r $(DESTDIR)$(INSTALLDIRINC)
257	$(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(LIBRARY)
258	$(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY)
259
260depend:
261	makedepend -Y -- $(CFLAGS) -- $(SRCS) 2>/dev/null
262
263$(LIBRARY):	$(LIBOBJS)
264	$(AR) crs $@ $?
265
266$(SHAREDLIBRARY):	$(LIBOBJS)
267ifeq ($(OS), Darwin)
268#	$(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(SONAME) -o $@ $^
269	$(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(INSTALLDIRLIB)/$(SONAME) -o $@ $^
270else
271	$(CC) -shared $(LDFLAGS) -Wl,-soname,$(SONAME) -o $@ $^
272endif
273
274upnpc-static:	upnpc.o $(LIBRARY)
275	$(CC) $(LDFLAGS) -o $@ $^
276
277#upnpc-shared:	upnpc.o $(SHAREDLIBRARY)
278#	$(CC) $(LDFLAGS) -o $@ $^
279
280listdevices:	listdevices.o $(LIBRARY) $(LDLIBS)
281	$(CC) $(LDFLAGS) -o $@ $^
282
283testminixml:	$(TESTMINIXMLOBJS)
284
285testminiwget:	$(TESTMINIWGETOBJS)
286
287minixmlvalid:	minixml.o minixmlvalid.o
288
289testupnpreplyparse:	$(TESTUPNPREPLYPARSE)
290
291testigddescparse:	$(TESTIGDDESCPARSE)
292
293testportlistingparse:	$(TESTPORTLISTINGPARSE)
294
295miniupnpcstrings.h:	miniupnpcstrings.h.in updateminiupnpcstrings.sh VERSION
296	$(SH) updateminiupnpcstrings.sh
297
298# ftp tool supplied with OpenBSD can download files from http.
299jnaerator-%.jar:
300	wget $(JNAERATORBASEURL)/$@ || \
301	curl -o $@ $(JNAERATORBASEURL)/$@ || \
302	ftp $(JNAERATORBASEURL)/$@
303
304jar: $(SHAREDLIBRARY)  $(JNAERATOR)
305	$(JAVA) -jar $(JNAERATOR) $(JNAERATORARGS) \
306	miniupnpc.h declspec.h upnpcommands.h upnpreplyparse.h \
307	igd_desc_parse.h miniwget.h upnperrors.h $(SHAREDLIBRARY) \
308	-package fr.free.miniupnp -o . -jar java/miniupnpc_$(JARSUFFIX).jar -v
309
310mvn_install:
311	mvn install:install-file -Dfile=java/miniupnpc_$(JARSUFFIX).jar \
312	 -DgroupId=com.github \
313	 -DartifactId=miniupnp \
314	 -Dversion=$(VERSION) \
315	 -Dpackaging=jar \
316	 -Dclassifier=$(JARSUFFIX) \
317	 -DgeneratePom=true \
318	 -DcreateChecksum=true
319
320# make .deb packages
321deb: /usr/share/pyshared/stdeb all
322	(python setup.py --command-packages=stdeb.command bdist_deb)
323
324# install .deb packages
325ideb:
326	(sudo dpkg -i deb_dist/*.deb)
327
328/usr/share/pyshared/stdeb: /usr/share/doc/python-all-dev
329	(sudo apt-get install python-stdeb)
330
331/usr/share/doc/python-all-dev:
332	(sudo apt-get install python-all-dev)
333
334minihttptestserver:	minihttptestserver.o
335
336# DO NOT DELETE THIS LINE -- make depend depends on it.
337
338igd_desc_parse.o: igd_desc_parse.h
339miniupnpc.o: miniupnpc.h declspec.h igd_desc_parse.h minissdpc.h miniwget.h
340miniupnpc.o: minisoap.h minixml.h upnpcommands.h upnpreplyparse.h
341miniupnpc.o: portlistingparse.h miniupnpctypes.h connecthostport.h
342miniupnpc.o: receivedata.h
343minixml.o: minixml.h
344minisoap.o: minisoap.h miniupnpcstrings.h
345miniwget.o: miniupnpcstrings.h miniwget.h declspec.h connecthostport.h
346miniwget.o: receivedata.h
347upnpc.o: miniwget.h declspec.h miniupnpc.h igd_desc_parse.h upnpcommands.h
348upnpc.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h upnperrors.h
349upnpcommands.o: upnpcommands.h upnpreplyparse.h portlistingparse.h declspec.h
350upnpcommands.o: miniupnpctypes.h miniupnpc.h igd_desc_parse.h
351upnpreplyparse.o: upnpreplyparse.h minixml.h
352testminixml.o: minixml.h igd_desc_parse.h
353minixmlvalid.o: minixml.h
354testupnpreplyparse.o: upnpreplyparse.h
355minissdpc.o: minissdpc.h miniupnpc.h declspec.h igd_desc_parse.h codelength.h
356upnperrors.o: upnperrors.h declspec.h upnpcommands.h upnpreplyparse.h
357upnperrors.o: portlistingparse.h miniupnpctypes.h miniupnpc.h
358upnperrors.o: igd_desc_parse.h
359testigddescparse.o: igd_desc_parse.h minixml.h miniupnpc.h declspec.h
360testminiwget.o: miniwget.h declspec.h
361connecthostport.o: connecthostport.h
362portlistingparse.o: portlistingparse.h declspec.h miniupnpctypes.h minixml.h
363receivedata.o: receivedata.h
364testportlistingparse.o: portlistingparse.h declspec.h miniupnpctypes.h
365miniupnpcmodule.o: miniupnpc.h declspec.h igd_desc_parse.h upnpcommands.h
366miniupnpcmodule.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h
367miniupnpcmodule.o: upnperrors.h
368listdevices.o: miniupnpc.h declspec.h igd_desc_parse.h
369