1# $Id: Makefile,v 1.104 2013/05/03 09:05:38 nanard Exp $ 2# MiniUPnP Project 3# http://miniupnp.free.fr/ 4# http://miniupnp.tuxfamily.org/ 5# https://github.com/miniupnp/miniupnp 6# (c) 2005-2013 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 -D_POSIX_C_SOURCE=1 39CFLAGS += -ansi 40# -DNO_GETADDRINFO 41INSTALL = install 42SH = /bin/sh 43JAVA = java 44# see http://code.google.com/p/jnaerator/ 45#JNAERATOR = jnaerator-0.9.7.jar 46#JNAERATOR = jnaerator-0.9.8-shaded.jar 47#JNAERATORARGS = -library miniupnpc 48#JNAERATOR = jnaerator-0.10-shaded.jar 49JNAERATOR = jnaerator-0.11-shaded.jar 50JNAERATORARGS = -mode StandaloneJar -runtime JNAerator -library miniupnpc 51JNAERATORBASEURL = http://jnaerator.googlecode.com/files/ 52 53ifeq (SunOS, $(OS)) 54 LDFLAGS=-lsocket -lnsl -lresolv 55endif 56 57# APIVERSION is used to build SONAME 58APIVERSION = 9 59 60SRCS = igd_desc_parse.c miniupnpc.c minixml.c minisoap.c miniwget.c \ 61 upnpc.c upnpcommands.c upnpreplyparse.c testminixml.c \ 62 minixmlvalid.c testupnpreplyparse.c minissdpc.c \ 63 upnperrors.c testigddescparse.c testminiwget.c \ 64 connecthostport.c portlistingparse.c receivedata.c 65 66LIBOBJS = miniwget.o minixml.o igd_desc_parse.o minisoap.o \ 67 miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \ 68 connecthostport.o portlistingparse.o receivedata.o 69 70ifneq ($(OS), AmigaOS) 71CFLAGS := -fPIC $(CFLAGS) 72LIBOBJS := $(LIBOBJS) minissdpc.o 73endif 74 75OBJS = $(patsubst %.c,%.o,$(SRCS)) 76 77# HEADERS to install 78HEADERS = miniupnpc.h miniwget.h upnpcommands.h igd_desc_parse.h \ 79 upnpreplyparse.h upnperrors.h miniupnpctypes.h \ 80 portlistingparse.h \ 81 declspec.h 82 83# library names 84LIBRARY = libminiupnpc.a 85ifeq ($(OS), Darwin) 86 SHAREDLIBRARY = libminiupnpc.dylib 87 SONAME = $(basename $(SHAREDLIBRARY)).$(APIVERSION).dylib 88 CFLAGS := -DMACOSX -D_DARWIN_C_SOURCE $(CFLAGS) 89else 90ifeq ($(JARSUFFIX), win32) 91 SHAREDLIBRARY = miniupnpc.dll 92else 93 # Linux/BSD/etc. 94 SHAREDLIBRARY = libminiupnpc.so 95 SONAME = $(SHAREDLIBRARY).$(APIVERSION) 96endif 97endif 98 99EXECUTABLES = upnpc-static 100EXECUTABLES_ADDTESTS = testminixml minixmlvalid testupnpreplyparse \ 101 testigddescparse testminiwget 102 103TESTMINIXMLOBJS = minixml.o igd_desc_parse.o testminixml.o 104 105TESTMINIWGETOBJS = miniwget.o testminiwget.o connecthostport.o receivedata.o 106 107TESTUPNPREPLYPARSE = testupnpreplyparse.o minixml.o upnpreplyparse.o 108 109TESTIGDDESCPARSE = testigddescparse.o igd_desc_parse.o minixml.o \ 110 miniupnpc.o miniwget.o upnpcommands.o upnpreplyparse.o \ 111 minisoap.o connecthostport.o receivedata.o \ 112 portlistingparse.o 113 114ifneq ($(OS), AmigaOS) 115EXECUTABLES := $(EXECUTABLES) upnpc-shared 116TESTMINIWGETOBJS := $(TESTMINIWGETOBJS) minissdpc.o 117TESTIGDDESCPARSE := $(TESTIGDDESCPARSE) minissdpc.o 118endif 119 120LIBDIR ?= lib 121# install directories 122INSTALLPREFIX ?= $(PREFIX)/usr 123INSTALLDIRINC = $(INSTALLPREFIX)/include/miniupnpc 124INSTALLDIRLIB = $(INSTALLPREFIX)/$(LIBDIR) 125INSTALLDIRBIN = $(INSTALLPREFIX)/bin 126INSTALLDIRMAN = $(INSTALLPREFIX)/share/man 127 128FILESTOINSTALL = $(LIBRARY) $(EXECUTABLES) 129ifneq ($(OS), AmigaOS) 130FILESTOINSTALL := $(FILESTOINSTALL) $(SHAREDLIBRARY) 131endif 132 133 134.PHONY: install clean depend all check test everything \ 135 installpythonmodule updateversion 136# validateminixml validateminiwget 137 138all: $(LIBRARY) $(EXECUTABLES) 139 140test: check 141 142check: validateminixml validateminiwget 143 144everything: all $(EXECUTABLES_ADDTESTS) 145 146pythonmodule: $(LIBRARY) miniupnpcmodule.c setup.py 147 python setup.py build 148 touch $@ 149 150installpythonmodule: pythonmodule 151 python setup.py install 152 153pythonmodule3: $(LIBRARY) miniupnpcmodule.c setup.py 154 python3 setup.py build 155 touch $@ 156 157installpythonmodule3: pythonmodule3 158 python3 setup.py install 159 160validateminixml: minixmlvalid 161 @echo "minixml validation test" 162 ./minixmlvalid 163 touch $@ 164 165validateminiwget: testminiwget minihttptestserver testminiwget.sh 166 @echo "miniwget validation test" 167 ./testminiwget.sh 168 touch $@ 169 170clean: 171 $(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) miniupnpcstrings.h 172 # clean python stuff 173 $(RM) pythonmodule pythonmodule3 validateminixml validateminiwget 174 $(RM) -r build/ dist/ 175 #python setup.py clean 176 # clean jnaerator stuff 177 $(RM) _jnaerator.* java/miniupnpc_$(OS).jar 178 179distclean: clean 180 $(RM) $(JNAERATOR) java/*.jar java/*.class out.errors.txt 181 182updateversion: miniupnpc.h 183 cp miniupnpc.h miniupnpc.h.bak 184 sed 's/\(.*MINIUPNPC_API_VERSION\s\+\)[0-9]\+/\1$(APIVERSION)/' < miniupnpc.h.bak > miniupnpc.h 185 186install: updateversion $(FILESTOINSTALL) 187 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRINC) 188 $(INSTALL) -m 644 $(HEADERS) $(DESTDIR)$(INSTALLDIRINC) 189 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRLIB) 190 $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(INSTALLDIRLIB) 191ifneq ($(OS), AmigaOS) 192 $(INSTALL) -m 644 $(SHAREDLIBRARY) $(DESTDIR)$(INSTALLDIRLIB)/$(SONAME) 193 ln -fs $(SONAME) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY) 194endif 195 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN) 196ifeq ($(OS), AmigaOS) 197 $(INSTALL) -m 755 upnpc-static $(DESTDIR)$(INSTALLDIRBIN)/upnpc 198else 199 $(INSTALL) -m 755 upnpc-shared $(DESTDIR)$(INSTALLDIRBIN)/upnpc 200endif 201 $(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip 202ifneq ($(OS), AmigaOS) 203 $(INSTALL) -d $(DESTDIR)$(INSTALLDIRMAN)/man3 204 $(INSTALL) man3/miniupnpc.3 $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3 205ifeq ($(OS), Linux) 206 gzip $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3 207endif 208endif 209 210 211cleaninstall: 212 $(RM) -r $(DESTDIR)$(INSTALLDIRINC) 213 $(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(LIBRARY) 214 $(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY) 215 216depend: 217 makedepend -Y -- $(CFLAGS) -- $(SRCS) 2>/dev/null 218 219$(LIBRARY): $(LIBOBJS) 220 $(AR) crs $@ $? 221 222$(SHAREDLIBRARY): $(LIBOBJS) 223ifeq ($(OS), Darwin) 224# $(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(SONAME) -o $@ $^ 225 $(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(INSTALLDIRLIB)/$(SONAME) -o $@ $^ 226else 227 $(CC) -shared $(LDFLAGS) -Wl,-soname,$(SONAME) -o $@ $^ 228endif 229 230upnpc-static: upnpc.o $(LIBRARY) 231 $(CC) $(LDFLAGS) -o $@ $^ 232 233upnpc-shared: upnpc.o $(SHAREDLIBRARY) 234 $(CC) $(LDFLAGS) -o $@ $^ 235 236testminixml: $(TESTMINIXMLOBJS) 237 238testminiwget: $(TESTMINIWGETOBJS) 239 240minixmlvalid: minixml.o minixmlvalid.o 241 242testupnpreplyparse: $(TESTUPNPREPLYPARSE) 243 244testigddescparse: $(TESTIGDDESCPARSE) 245 246miniupnpcstrings.h: miniupnpcstrings.h.in updateminiupnpcstrings.sh VERSION 247 $(SH) updateminiupnpcstrings.sh 248 249# ftp tool supplied with OpenBSD can download files from http. 250jnaerator-%.jar: 251 wget $(JNAERATORBASEURL)/$@ || \ 252 curl -o $@ $(JNAERATORBASEURL)/$@ || \ 253 ftp $(JNAERATORBASEURL)/$@ 254 255jar: $(SHAREDLIBRARY) $(JNAERATOR) 256 $(JAVA) -jar $(JNAERATOR) $(JNAERATORARGS) \ 257 miniupnpc.h declspec.h upnpcommands.h upnpreplyparse.h \ 258 igd_desc_parse.h miniwget.h upnperrors.h $(SHAREDLIBRARY) \ 259 -package fr.free.miniupnp -o . -jar java/miniupnpc_$(JARSUFFIX).jar -v 260 261mvn_install: 262 mvn install:install-file -Dfile=java/miniupnpc_$(JARSUFFIX).jar \ 263 -DgroupId=com.github \ 264 -DartifactId=miniupnp \ 265 -Dversion=$(VERSION) \ 266 -Dpackaging=jar \ 267 -Dclassifier=$(JARSUFFIX) \ 268 -DgeneratePom=true \ 269 -DcreateChecksum=true 270 271# make .deb packages 272deb: /usr/share/pyshared/stdeb all 273 (python setup.py --command-packages=stdeb.command bdist_deb) 274 275# install .deb packages 276ideb: 277 (sudo dpkg -i deb_dist/*.deb) 278 279/usr/share/pyshared/stdeb: /usr/share/doc/python-all-dev 280 (sudo apt-get install python-stdeb) 281 282/usr/share/doc/python-all-dev: 283 (sudo apt-get install python-all-dev) 284 285minihttptestserver: minihttptestserver.o 286 287# DO NOT DELETE THIS LINE -- make depend depends on it. 288 289igd_desc_parse.o: igd_desc_parse.h 290miniupnpc.o: miniupnpc.h declspec.h igd_desc_parse.h minissdpc.h miniwget.h 291miniupnpc.o: minisoap.h minixml.h upnpcommands.h upnpreplyparse.h 292miniupnpc.o: portlistingparse.h miniupnpctypes.h connecthostport.h 293miniupnpc.o: receivedata.h 294minixml.o: minixml.h 295minisoap.o: minisoap.h miniupnpcstrings.h 296miniwget.o: miniupnpcstrings.h miniwget.h declspec.h connecthostport.h 297miniwget.o: receivedata.h 298upnpc.o: miniwget.h declspec.h miniupnpc.h igd_desc_parse.h upnpcommands.h 299upnpc.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h upnperrors.h 300upnpcommands.o: upnpcommands.h upnpreplyparse.h portlistingparse.h declspec.h 301upnpcommands.o: miniupnpctypes.h miniupnpc.h igd_desc_parse.h 302upnpreplyparse.o: upnpreplyparse.h minixml.h 303testminixml.o: minixml.h igd_desc_parse.h 304minixmlvalid.o: minixml.h 305testupnpreplyparse.o: upnpreplyparse.h 306minissdpc.o: minissdpc.h miniupnpc.h declspec.h igd_desc_parse.h codelength.h 307upnperrors.o: upnperrors.h declspec.h upnpcommands.h upnpreplyparse.h 308upnperrors.o: portlistingparse.h miniupnpctypes.h miniupnpc.h 309upnperrors.o: igd_desc_parse.h 310testigddescparse.o: igd_desc_parse.h minixml.h miniupnpc.h declspec.h 311testminiwget.o: miniwget.h declspec.h 312connecthostport.o: connecthostport.h 313receivedata.o: receivedata.h 314