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