1# $Id: Makefile,v 1.131 2015/10/08 16:15:46 nanard Exp $ 2# MiniUPnP Project 3# http://miniupnp.free.fr/ 4# http://miniupnp.tuxfamily.org/ 5# https://github.com/miniupnp/miniupnp 6# (c) 2005-2015 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) 13OS = $(shell uname -s) 14VERSION = $(shell cat VERSION) 15 16ifeq ($(OS), Darwin) 17JARSUFFIX=mac 18endif 19ifeq ($(OS), Linux) 20JARSUFFIX=linux 21endif 22ifneq (,$(findstring NT-5.1,$(OS))) 23JARSUFFIX=win32 24endif 25 26HAVE_IPV6 ?= yes 27export HAVE_IPV6 28 29CC ?= gcc 30#AR = gar 31#CFLAGS = -O -g -DDEBUG 32CFLAGS ?= -O 33CFLAGS += -Wall 34CFLAGS += -W -Wstrict-prototypes 35CFLAGS += -fno-common 36CFLAGS += -DMINIUPNPC_SET_SOCKET_TIMEOUT 37CFLAGS += -DMINIUPNPC_GET_SRC_ADDR 38CFLAGS += -D_BSD_SOURCE 39CFLAGS += -D_DEFAULT_SOURCE 40ifneq ($(OS), FreeBSD) 41ifneq ($(OS), Darwin) 42#CFLAGS += -D_POSIX_C_SOURCE=200112L 43CFLAGS += -D_XOPEN_SOURCE=600 44endif 45endif 46#CFLAGS += -ansi 47# -DNO_GETADDRINFO 48INSTALL = 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 56#JNAERATOR = jnaerator-0.11-shaded.jar 57# https://repo1.maven.org/maven2/com/nativelibs4java/jnaerator/0.12/jnaerator-0.12-shaded.jar 58JNAERATOR = jnaerator-0.12-shaded.jar 59JNAERATORARGS = -mode StandaloneJar -runtime JNAerator -library miniupnpc 60#JNAERATORBASEURL = http://jnaerator.googlecode.com/files/ 61JNAERATORBASEURL = https://repo1.maven.org/maven2/com/nativelibs4java/jnaerator/0.12 62 63ifeq (SunOS, $(OS)) 64 LDFLAGS=-lsocket -lnsl -lresolv 65endif 66 67# APIVERSION is used to build SONAME 68APIVERSION = 15 69 70SRCS = igd_desc_parse.c miniupnpc.c minixml.c minisoap.c miniwget.c \ 71 upnpc.c upnpcommands.c upnpreplyparse.c testminixml.c \ 72 minixmlvalid.c testupnpreplyparse.c minissdpc.c \ 73 upnperrors.c testigddescparse.c testminiwget.c \ 74 connecthostport.c portlistingparse.c receivedata.c \ 75 upnpdev.c testportlistingparse.c miniupnpcmodule.c \ 76 minihttptestserver.c \ 77 listdevices.c 78 79LIBOBJS = miniwget.o minixml.o igd_desc_parse.o minisoap.o \ 80 miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \ 81 connecthostport.o portlistingparse.o receivedata.o upnpdev.o 82 83ifneq ($(OS), AmigaOS) 84CFLAGS := -fPIC $(CFLAGS) 85LIBOBJS := $(LIBOBJS) minissdpc.o 86endif 87 88OBJS = $(patsubst %.c,%.o,$(SRCS)) 89 90# HEADERS to install 91HEADERS = miniupnpc.h miniwget.h upnpcommands.h igd_desc_parse.h \ 92 upnpreplyparse.h upnperrors.h miniupnpctypes.h \ 93 portlistingparse.h \ 94 upnpdev.h \ 95 miniupnpc_declspec.h 96 97# library names 98LIBRARY = libminiupnpc.a 99ifeq ($(OS), Darwin) 100 SHAREDLIBRARY = libminiupnpc.dylib 101 SONAME = $(basename $(SHAREDLIBRARY)).$(APIVERSION).dylib 102 CFLAGS := -D_DARWIN_C_SOURCE $(CFLAGS) 103else 104ifeq ($(JARSUFFIX), win32) 105 SHAREDLIBRARY = miniupnpc.dll 106else 107 # Linux/BSD/etc. 108 SHAREDLIBRARY = libminiupnpc.so 109 SONAME = $(SHAREDLIBRARY).$(APIVERSION) 110endif 111endif 112 113EXECUTABLES = upnpc-static listdevices 114EXECUTABLES_ADDTESTS = testminixml minixmlvalid testupnpreplyparse \ 115 testigddescparse testminiwget testportlistingparse 116 117TESTMINIXMLOBJS = minixml.o igd_desc_parse.o testminixml.o 118 119TESTMINIWGETOBJS = miniwget.o testminiwget.o connecthostport.o receivedata.o 120 121TESTUPNPREPLYPARSE = testupnpreplyparse.o minixml.o upnpreplyparse.o 122 123TESTPORTLISTINGPARSE = testportlistingparse.o minixml.o portlistingparse.o 124 125TESTIGDDESCPARSE = testigddescparse.o igd_desc_parse.o minixml.o \ 126 miniupnpc.o miniwget.o upnpcommands.o upnpreplyparse.o \ 127 minisoap.o connecthostport.o receivedata.o \ 128 portlistingparse.o 129 130ifneq ($(OS), AmigaOS) 131EXECUTABLES := $(EXECUTABLES) upnpc-shared 132TESTMINIWGETOBJS := $(TESTMINIWGETOBJS) minissdpc.o 133TESTIGDDESCPARSE := $(TESTIGDDESCPARSE) minissdpc.o 134endif 135 136LIBDIR ?= lib 137# install directories 138INSTALLPREFIX ?= $(PREFIX)/usr 139INSTALLDIRINC = $(INSTALLPREFIX)/include/miniupnpc 140INSTALLDIRLIB = $(INSTALLPREFIX)/$(LIBDIR) 141INSTALLDIRBIN = $(INSTALLPREFIX)/bin 142INSTALLDIRMAN = $(INSTALLPREFIX)/share/man 143 144FILESTOINSTALL = $(LIBRARY) $(EXECUTABLES) 145ifneq ($(OS), AmigaOS) 146FILESTOINSTALL := $(FILESTOINSTALL) $(SHAREDLIBRARY) 147endif 148 149 150.PHONY: install clean depend all check test everything \ 151 installpythonmodule updateversion 152# validateminixml validateminiwget 153 154all: $(LIBRARY) $(EXECUTABLES) 155 156test: check 157 158check: validateminixml validateminiwget validateupnpreplyparse \ 159 validateportlistingparse validateigddescparse 160 161everything: all $(EXECUTABLES_ADDTESTS) 162 163pythonmodule: $(LIBRARY) miniupnpcmodule.c setup.py 164 python setup.py build 165 touch $@ 166 167installpythonmodule: pythonmodule 168 python setup.py install 169 170pythonmodule3: $(LIBRARY) miniupnpcmodule.c setup.py 171 python3 setup.py build 172 touch $@ 173 174installpythonmodule3: pythonmodule3 175 python3 setup.py install 176 177validateminixml: minixmlvalid 178 @echo "minixml validation test" 179 ./minixmlvalid 180 touch $@ 181 182validateminiwget: testminiwget minihttptestserver testminiwget.sh 183 @echo "miniwget validation test" 184 ./testminiwget.sh 185 touch $@ 186 187validateupnpreplyparse: testupnpreplyparse testupnpreplyparse.sh 188 @echo "upnpreplyparse validation test" 189 ./testupnpreplyparse.sh 190 touch $@ 191 192validateportlistingparse: testportlistingparse 193 @echo "portlistingparse validation test" 194 ./testportlistingparse 195 touch $@ 196 197validateigddescparse: testigddescparse 198 @echo "igd desc parse validation test" 199 ./testigddescparse testdesc/new_LiveBox_desc.xml testdesc/new_LiveBox_desc.values 200 ./testigddescparse testdesc/linksys_WAG200G_desc.xml testdesc/linksys_WAG200G_desc.values 201 touch $@ 202 203clean: 204 $(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) miniupnpcstrings.h 205 $(RM) $(EXECUTABLES_ADDTESTS) 206 # clean python stuff 207 $(RM) pythonmodule pythonmodule3 208 $(RM) validateminixml validateminiwget validateupnpreplyparse 209 $(RM) validateigddescparse 210 $(RM) minihttptestserver 211 $(RM) -r build/ dist/ 212 #python setup.py clean 213 # clean jnaerator stuff 214 $(RM) _jnaerator.* java/miniupnpc_$(OS).jar 215 216distclean: clean 217 $(RM) $(JNAERATOR) java/*.jar java/*.class out.errors.txt 218 219updateversion: miniupnpc.h 220 cp miniupnpc.h miniupnpc.h.bak 221 sed 's/\(.*MINIUPNPC_API_VERSION\s\+\)[0-9]\+/\1$(APIVERSION)/' < miniupnpc.h.bak > miniupnpc.h 222 223install: updateversion $(FILESTOINSTALL) 224 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRINC) 225 $(INSTALL) -m 644 $(HEADERS) $(DESTDIR)$(INSTALLDIRINC) 226 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRLIB) 227 $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(INSTALLDIRLIB) 228ifneq ($(OS), AmigaOS) 229 $(INSTALL) -m 644 $(SHAREDLIBRARY) $(DESTDIR)$(INSTALLDIRLIB)/$(SONAME) 230 ln -fs $(SONAME) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY) 231endif 232 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN) 233ifeq ($(OS), AmigaOS) 234 $(INSTALL) -m 755 upnpc-static $(DESTDIR)$(INSTALLDIRBIN)/upnpc 235else 236 $(INSTALL) -m 755 upnpc-shared $(DESTDIR)$(INSTALLDIRBIN)/upnpc 237endif 238 $(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip 239ifneq ($(OS), AmigaOS) 240 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRMAN)/man3 241 $(INSTALL) -m 644 man3/miniupnpc.3 $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3 242ifeq ($(OS), Linux) 243 gzip -f $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3 244endif 245endif 246 247install-static: updateversion $(FILESTOINSTALL) 248 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRINC) 249 $(INSTALL) -m 644 $(HEADERS) $(DESTDIR)$(INSTALLDIRINC) 250 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRLIB) 251 $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(INSTALLDIRLIB) 252 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN) 253 $(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip 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 277upnpc-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 miniupnpc_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 miniupnpc_declspec.h igd_desc_parse.h upnpdev.h 340miniupnpc.o: minissdpc.h miniwget.h minisoap.h minixml.h upnpcommands.h 341miniupnpc.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h 342miniupnpc.o: connecthostport.h 343minixml.o: minixml.h 344minisoap.o: minisoap.h miniupnpcstrings.h 345miniwget.o: miniupnpcstrings.h miniwget.h miniupnpc_declspec.h 346miniwget.o: connecthostport.h receivedata.h 347upnpc.o: miniwget.h miniupnpc_declspec.h miniupnpc.h igd_desc_parse.h 348upnpc.o: upnpdev.h upnpcommands.h upnpreplyparse.h portlistingparse.h 349upnpc.o: miniupnpctypes.h upnperrors.h miniupnpcstrings.h 350upnpcommands.o: upnpcommands.h upnpreplyparse.h portlistingparse.h 351upnpcommands.o: miniupnpc_declspec.h miniupnpctypes.h miniupnpc.h 352upnpcommands.o: igd_desc_parse.h upnpdev.h 353upnpreplyparse.o: upnpreplyparse.h minixml.h 354testminixml.o: minixml.h igd_desc_parse.h 355minixmlvalid.o: minixml.h 356testupnpreplyparse.o: upnpreplyparse.h 357minissdpc.o: minissdpc.h miniupnpc_declspec.h upnpdev.h miniupnpc.h 358minissdpc.o: igd_desc_parse.h receivedata.h codelength.h 359upnperrors.o: upnperrors.h miniupnpc_declspec.h upnpcommands.h 360upnperrors.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h 361upnperrors.o: miniupnpc.h igd_desc_parse.h upnpdev.h 362testigddescparse.o: igd_desc_parse.h minixml.h miniupnpc.h 363testigddescparse.o: miniupnpc_declspec.h upnpdev.h 364testminiwget.o: miniwget.h miniupnpc_declspec.h 365connecthostport.o: connecthostport.h 366portlistingparse.o: portlistingparse.h miniupnpc_declspec.h miniupnpctypes.h 367portlistingparse.o: minixml.h 368receivedata.o: receivedata.h 369upnpdev.o: upnpdev.h miniupnpc_declspec.h 370testportlistingparse.o: portlistingparse.h miniupnpc_declspec.h 371testportlistingparse.o: miniupnpctypes.h 372miniupnpcmodule.o: miniupnpc.h miniupnpc_declspec.h igd_desc_parse.h 373miniupnpcmodule.o: upnpdev.h upnpcommands.h upnpreplyparse.h 374miniupnpcmodule.o: portlistingparse.h miniupnpctypes.h upnperrors.h 375listdevices.o: miniupnpc.h miniupnpc_declspec.h igd_desc_parse.h upnpdev.h 376