Annotation of embedaddon/miniupnpd/miniupnpc/Makefile, revision 1.1
1.1 ! misho 1: # $Id: Makefile,v 1.145 2021/09/28 20:42:25 nanard Exp $
! 2: # MiniUPnP Project
! 3: # http://miniupnp.free.fr/
! 4: # https://miniupnp.tuxfamily.org/
! 5: # https://github.com/miniupnp/miniupnp
! 6: # (c) 2005-2022 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: OS = $(shell $(CC) -dumpmachine)
! 14: VERSION = $(shell cat VERSION)
! 15:
! 16: ifneq (, $(findstring darwin, $(OS)))
! 17: JARSUFFIX=mac
! 18: LIBTOOL ?= $(shell which libtool)
! 19: endif
! 20: ifneq (, $(findstring linux, $(OS)))
! 21: JARSUFFIX=linux
! 22: endif
! 23: ifneq (, $(findstring mingw, $(OS))$(findstring cygwin, $(OS))$(findstring msys, $(OS)))
! 24: JARSUFFIX=win32
! 25: endif
! 26:
! 27: HAVE_IPV6 ?= yes
! 28: export HAVE_IPV6
! 29:
! 30: # directories
! 31: INCDIR = include
! 32: SRCDIR = src
! 33: BUILD = build
! 34:
! 35: CC ?= gcc
! 36: #AR = gar
! 37: #CFLAGS = -O -g
! 38: # to debug :
! 39: ASANFLAGS = -fsanitize=address -fsanitize=undefined -fsanitize=leak
! 40: #CFLAGS = -g -ggdb -O0 $(ASANFLAGS) -fno-omit-frame-pointer
! 41: #CPPFLAGS += -DDEBUG
! 42: #LDFLAGS += $(ASANFLAGS)
! 43: CFLAGS ?= -O
! 44: CFLAGS += -Wall
! 45: CFLAGS += -W -Wstrict-prototypes
! 46: CFLAGS += -fno-common
! 47: CPPFLAGS += -I$(BUILD)
! 48: CPPFLAGS += -DMINIUPNPC_SET_SOCKET_TIMEOUT
! 49: CPPFLAGS += -DMINIUPNPC_GET_SRC_ADDR
! 50: CPPFLAGS += -D_BSD_SOURCE
! 51: CPPFLAGS += -D_DEFAULT_SOURCE
! 52: ifneq (, $(findstring netbsd, $(OS)))
! 53: CPPFLAGS += -D_NETBSD_SOURCE
! 54: endif
! 55: ifeq (, $(findstring freebsd, $(OS))$(findstring darwin, $(OS)))
! 56: #CPPFLAGS += -D_POSIX_C_SOURCE=200112L
! 57: CPPFLAGS += -D_XOPEN_SOURCE=600
! 58: endif
! 59: #CFLAGS += -ansi
! 60: #CPPFLAGS += -DNO_GETADDRINFO
! 61:
! 62: DEPFLAGS = -MM -MG
! 63:
! 64: MKDIR = mkdir -p
! 65: INSTALL = install
! 66: SH = /bin/sh
! 67: JAVA = java
! 68: # see http://code.google.com/p/jnaerator/
! 69: #JNAERATOR = jnaerator-0.9.7.jar
! 70: #JNAERATOR = jnaerator-0.9.8-shaded.jar
! 71: #JNAERATORARGS = -library miniupnpc
! 72: #JNAERATOR = jnaerator-0.10-shaded.jar
! 73: #JNAERATOR = jnaerator-0.11-shaded.jar
! 74: # https://repo1.maven.org/maven2/com/nativelibs4java/jnaerator/0.12/jnaerator-0.12-shaded.jar
! 75: JNAERATOR = jnaerator-0.12-shaded.jar
! 76: JNAERATORARGS = -mode StandaloneJar -runtime JNAerator -library miniupnpc
! 77: #JNAERATORBASEURL = http://jnaerator.googlecode.com/files/
! 78: JNAERATORBASEURL = https://repo1.maven.org/maven2/com/nativelibs4java/jnaerator/0.12
! 79:
! 80: ifneq (, $(findstring sun, $(OS))$(findstring solaris, $(OS)))
! 81: LDLIBS=-lsocket -lnsl -lresolv
! 82: CPPFLAGS += -D__EXTENSIONS__
! 83: CFLAGS += -std=c99
! 84: endif
! 85:
! 86: # APIVERSION is used to build SONAME
! 87: APIVERSION = 17
! 88:
! 89: SRCS = $(wildcard $(SRCDIR)/*.c)
! 90:
! 91: LIBOBJS = $(addprefix $(BUILD)/,miniwget.o minixml.o igd_desc_parse.o minisoap.o \
! 92: miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \
! 93: connecthostport.o portlistingparse.o receivedata.o upnpdev.o \
! 94: addr_is_reserved.o)
! 95:
! 96: BUILDINCLUDES = $(addprefix $(BUILD)/, miniupnpcstrings.h)
! 97:
! 98: OBJS = $(patsubst $(SRCDIR)/%.c,$(BUILD)/%.o,$(SRCS))
! 99: DEPS = $(patsubst $(SRCDIR)/%.c,$(BUILD)/%.d,$(SRCS))
! 100:
! 101: # HEADERS to install
! 102: CPPFLAGS += -I$(INCDIR)
! 103: HEADERS = $(wildcard $(INCDIR)/*.h)
! 104:
! 105: # library names
! 106: LIBRARY = $(BUILD)/libminiupnpc.a
! 107: ifneq (, $(findstring darwin, $(OS)))
! 108: SHAREDLIBRARY = $(BUILD)/libminiupnpc.dylib
! 109: SONAME = $(notdir $(basename $(SHAREDLIBRARY))).$(APIVERSION).dylib
! 110: CPPFLAGS += -D_DARWIN_C_SOURCE
! 111: else
! 112: ifeq ($(JARSUFFIX), win32)
! 113: SHAREDLIBRARY = $(BUILD)/miniupnpc.dll
! 114: else
! 115: # Linux/BSD/etc.
! 116: SHAREDLIBRARY = $(BUILD)/libminiupnpc.so
! 117: SONAME = $(notdir $(SHAREDLIBRARY)).$(APIVERSION)
! 118: endif
! 119: endif
! 120:
! 121: EXECUTABLES = $(addprefix $(BUILD)/, upnpc-static listdevices)
! 122: EXECUTABLES_ADDTESTS = $(addprefix $(BUILD)/, testminixml minixmlvalid \
! 123: testupnpreplyparse testigddescparse testminiwget testportlistingparse)
! 124:
! 125: TESTMINIXMLOBJS = $(addprefix $(BUILD)/, minixml.o igd_desc_parse.o testminixml.o)
! 126:
! 127: TESTMINIWGETOBJS = $(addprefix $(BUILD)/, miniwget.o testminiwget.o connecthostport.o receivedata.o)
! 128:
! 129: TESTUPNPREPLYPARSE = $(addprefix $(BUILD)/, testupnpreplyparse.o minixml.o upnpreplyparse.o)
! 130:
! 131: TESTPORTLISTINGPARSE = $(addprefix $(BUILD)/, testportlistingparse.o minixml.o portlistingparse.o)
! 132:
! 133: TESTADDR_IS_RESERVED = $(addprefix $(BUILD)/, testaddr_is_reserved.o addr_is_reserved.o)
! 134:
! 135: TESTIGDDESCPARSE = $(addprefix $(BUILD)/, testigddescparse.o igd_desc_parse.o minixml.o \
! 136: miniupnpc.o miniwget.o upnpcommands.o upnpreplyparse.o \
! 137: minisoap.o connecthostport.o receivedata.o \
! 138: portlistingparse.o addr_is_reserved.o)
! 139:
! 140: ifeq (, $(findstring amiga, $(OS)))
! 141: ifeq (, $(findstring mingw, $(OS))$(findstring cygwin, $(OS))$(findstring msys, $(OS)))
! 142: CFLAGS += -fPIC
! 143: endif
! 144: EXECUTABLES += $(BUILD)/upnpc-shared
! 145: TESTMINIWGETOBJS += $(BUILD)/minissdpc.o
! 146: TESTIGDDESCPARSE += $(BUILD)/minissdpc.o
! 147: LIBOBJS += $(BUILD)/minissdpc.o
! 148: endif
! 149:
! 150: LIBDIR ?= lib
! 151: # install directories
! 152: ifeq ($(strip $(PREFIX)),)
! 153: INSTALLPREFIX ?= /usr
! 154: else
! 155: INSTALLPREFIX ?= $(PREFIX)
! 156: endif
! 157: INSTALLDIRINC = $(INSTALLPREFIX)/include/miniupnpc
! 158: INSTALLDIRLIB = $(INSTALLPREFIX)/$(LIBDIR)
! 159: INSTALLDIRBIN = $(INSTALLPREFIX)/bin
! 160: INSTALLDIRMAN = $(INSTALLPREFIX)/share/man
! 161: PKGCONFIGDIR = $(INSTALLDIRLIB)/pkgconfig
! 162:
! 163: FILESTOINSTALL = $(LIBRARY) $(EXECUTABLES)
! 164: ifeq (, $(findstring amiga, $(OS)))
! 165: FILESTOINSTALL += $(SHAREDLIBRARY) $(BUILD)/miniupnpc.pc
! 166: endif
! 167:
! 168:
! 169: .PHONY: install clean depend all check test everything \
! 170: installpythonmodule updateversion
! 171:
! 172: all: $(LIBRARY) $(EXECUTABLES)
! 173:
! 174: test: check
! 175:
! 176: check: validateminixml validateminiwget validateupnpreplyparse \
! 177: validateportlistingparse validateigddescparse validateaddr_is_reserved
! 178:
! 179: everything: all $(EXECUTABLES_ADDTESTS)
! 180:
! 181: pythonmodule: $(LIBRARY) $(SRCDIR)/miniupnpcmodule.c setup.py
! 182: MAKE=$(MAKE) python setup.py build
! 183: touch $@
! 184:
! 185: installpythonmodule: pythonmodule
! 186: MAKE=$(MAKE) python setup.py install
! 187:
! 188: pythonmodule3: $(LIBRARY) $(SRCDIR)/miniupnpcmodule.c setup.py
! 189: MAKE=$(MAKE) python3 setup.py build
! 190: touch $@
! 191:
! 192: installpythonmodule3: pythonmodule3
! 193: MAKE=$(MAKE) python3 setup.py install
! 194:
! 195: validateminixml: $(BUILD)/minixmlvalid
! 196: @echo "minixml validation test"
! 197: ./$<
! 198: touch $@
! 199:
! 200: validateminiwget: testminiwget.sh $(BUILD)/testminiwget $(BUILD)/minihttptestserver
! 201: @echo "miniwget validation test"
! 202: ./$<
! 203: touch $@
! 204:
! 205: validateupnpreplyparse: testupnpreplyparse.sh $(BUILD)/testupnpreplyparse
! 206: @echo "upnpreplyparse validation test"
! 207: ./$<
! 208: touch $@
! 209:
! 210: validateportlistingparse: $(BUILD)/testportlistingparse
! 211: @echo "portlistingparse validation test"
! 212: ./$<
! 213: touch $@
! 214:
! 215: validateigddescparse: $(BUILD)/testigddescparse
! 216: @echo "igd desc parse validation test"
! 217: ./$< testdesc/new_LiveBox_desc.xml testdesc/new_LiveBox_desc.values
! 218: ./$< testdesc/linksys_WAG200G_desc.xml testdesc/linksys_WAG200G_desc.values
! 219: touch $@
! 220:
! 221: validateaddr_is_reserved: $(BUILD)/testaddr_is_reserved
! 222: @echo "addr_is_reserved() validation test"
! 223: ./$<
! 224: touch $@
! 225:
! 226: clean:
! 227: $(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) $(BUILDINCLUDES)
! 228: $(RM) $(EXECUTABLES_ADDTESTS)
! 229: # clean python stuff
! 230: $(RM) pythonmodule pythonmodule3
! 231: $(RM) validateminixml validateminiwget validateupnpreplyparse
! 232: $(RM) validateigddescparse
! 233: $(RM) minihttptestserver
! 234: $(RM) testaddr_is_reserved
! 235: $(RM) -r build/ dist/
! 236: #python setup.py clean
! 237: # clean jnaerator stuff
! 238: $(RM) _jnaerator.* java/miniupnpc_$(OS).jar
! 239:
! 240: distclean: clean
! 241: $(RM) $(JNAERATOR) java/*.jar java/*.class out.errors.txt
! 242:
! 243: updateversion: include/miniupnpc.h
! 244: cp $< $<.bak
! 245: sed 's/\(.*MINIUPNPC_API_VERSION\s\+\)[0-9]\+/\1$(APIVERSION)/' < $<.bak > $<
! 246:
! 247: install: 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: ifeq (, $(findstring amiga, $(OS)))
! 253: $(INSTALL) -m 644 $(SHAREDLIBRARY) $(DESTDIR)$(INSTALLDIRLIB)/$(SONAME)
! 254: ln -fs $(SONAME) $(DESTDIR)$(INSTALLDIRLIB)/$(notdir $(SHAREDLIBRARY))
! 255: $(INSTALL) -d $(DESTDIR)$(PKGCONFIGDIR)
! 256: $(INSTALL) -m 644 $(BUILD)/miniupnpc.pc $(DESTDIR)$(PKGCONFIGDIR)
! 257: endif
! 258: $(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN)
! 259: ifneq (, $(findstring amiga, $(OS)))
! 260: $(INSTALL) -m 755 $(BUILD)/upnpc-static $(DESTDIR)$(INSTALLDIRBIN)/upnpc
! 261: else
! 262: $(INSTALL) -m 755 $(BUILD)/upnpc-shared $(DESTDIR)$(INSTALLDIRBIN)/upnpc
! 263: endif
! 264: $(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip
! 265: ifeq (, $(findstring amiga, $(OS)))
! 266: $(INSTALL) -d $(DESTDIR)$(INSTALLDIRMAN)/man3
! 267: $(INSTALL) -m 644 man3/miniupnpc.3 $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3
! 268: ifneq (, $(findstring linux, $(OS)))
! 269: gzip -f $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3
! 270: endif
! 271: endif
! 272:
! 273: install-static: updateversion $(FILESTOINSTALL)
! 274: $(INSTALL) -d $(DESTDIR)$(INSTALLDIRINC)
! 275: $(INSTALL) -m 644 $(HEADERS) $(DESTDIR)$(INSTALLDIRINC)
! 276: $(INSTALL) -d $(DESTDIR)$(INSTALLDIRLIB)
! 277: $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(INSTALLDIRLIB)
! 278: $(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN)
! 279: $(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip
! 280:
! 281: cleaninstall:
! 282: $(RM) -r $(DESTDIR)$(INSTALLDIRINC)
! 283: $(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(LIBRARY)
! 284: $(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY)
! 285:
! 286: $(BUILD)/miniupnpc.pc: VERSION
! 287: @$(MKDIR) $(@D)
! 288: $(RM) $@
! 289: echo "prefix=$(INSTALLPREFIX)" >> $@
! 290: echo "exec_prefix=\$${prefix}" >> $@
! 291: echo "libdir=\$${exec_prefix}/$(LIBDIR)" >> $@
! 292: echo "includedir=\$${prefix}/include" >> $@
! 293: echo "" >> $@
! 294: echo "Name: miniUPnPc" >> $@
! 295: echo "Description: UPnP IGD client lightweight library" >> $@
! 296: echo "URL: https://miniupnp.tuxfamily.org/" >> $@
! 297: echo "Version: $(VERSION)" >> $@
! 298: echo "Libs: -L\$${libdir} -lminiupnpc" >> $@
! 299: echo "Cflags: -I\$${includedir}" >> $@
! 300:
! 301: depend: $(DEPS)
! 302:
! 303: $(LIBRARY): $(LIBOBJS)
! 304: ifneq (, $(findstring darwin, $(OS)))
! 305: $(LIBTOOL) -static -o $@ $?
! 306: else
! 307: $(AR) crs $@ $?
! 308: endif
! 309:
! 310: $(SHAREDLIBRARY): $(LIBOBJS)
! 311: ifneq (, $(findstring darwin, $(OS)))
! 312: # $(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(SONAME) -o $@ $^
! 313: $(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(INSTALLDIRLIB)/$(SONAME) -o $@ $^
! 314: else
! 315: $(CC) -shared $(LDFLAGS) -Wl,-soname,$(SONAME) -o $@ $^
! 316: endif
! 317:
! 318: $(BUILD)/%.o: $(SRCDIR)/%.c $(BUILD)/%.d
! 319: $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
! 320:
! 321: $(DEPS): $(BUILDINCLUDES)
! 322:
! 323: $(BUILD)/%.d: $(SRCDIR)/%.c
! 324: @$(MKDIR) $(@D)
! 325: $(CC) $(CPPFLAGS) $(DEPFLAGS) -MT $@ -o $@ $<
! 326:
! 327: $(BUILD)/upnpc-static: $(BUILD)/upnpc.o $(LIBRARY)
! 328: $(CC) $(LDFLAGS) -o $@ $^ $(LOADLIBES) $(LDLIBS)
! 329:
! 330: $(BUILD)/upnpc-shared: $(BUILD)/upnpc.o $(SHAREDLIBRARY)
! 331: $(CC) $(LDFLAGS) -o $@ $^ $(LOADLIBES) $(LDLIBS)
! 332:
! 333: $(BUILD)/listdevices: $(BUILD)/listdevices.o $(LIBRARY)
! 334:
! 335: $(BUILD)/testminixml: $(TESTMINIXMLOBJS)
! 336:
! 337: $(BUILD)/testminiwget: $(TESTMINIWGETOBJS)
! 338:
! 339: $(BUILD)/minixmlvalid: $(addprefix $(BUILD)/, minixml.o minixmlvalid.o)
! 340:
! 341: $(BUILD)/testupnpreplyparse: $(TESTUPNPREPLYPARSE)
! 342:
! 343: $(BUILD)/testigddescparse: $(TESTIGDDESCPARSE)
! 344:
! 345: $(BUILD)/testportlistingparse: $(TESTPORTLISTINGPARSE)
! 346:
! 347: $(BUILD)/testaddr_is_reserved: $(TESTADDR_IS_RESERVED)
! 348:
! 349: $(BUILD)/miniupnpcstrings.h: miniupnpcstrings.h.in updateminiupnpcstrings.sh VERSION
! 350: @$(MKDIR) $(@D)
! 351: $(SH) updateminiupnpcstrings.sh $@ $<
! 352:
! 353: # ftp tool supplied with OpenBSD can download files from http.
! 354: jnaerator-%.jar:
! 355: wget $(JNAERATORBASEURL)/$@ || \
! 356: curl -o $@ $(JNAERATORBASEURL)/$@ || \
! 357: ftp $(JNAERATORBASEURL)/$@
! 358:
! 359: jar: $(SHAREDLIBRARY) $(JNAERATOR)
! 360: $(JAVA) -jar $(JNAERATOR) $(JNAERATORARGS) \
! 361: miniupnpc.h miniupnpc_declspec.h upnpcommands.h upnpreplyparse.h \
! 362: igd_desc_parse.h miniwget.h upnperrors.h $(SHAREDLIBRARY) \
! 363: -package fr.free.miniupnp -o . -jar java/miniupnpc_$(JARSUFFIX).jar -v
! 364:
! 365: mvn_install:
! 366: mvn install:install-file -Dfile=java/miniupnpc_$(JARSUFFIX).jar \
! 367: -DgroupId=com.github \
! 368: -DartifactId=miniupnp \
! 369: -Dversion=$(VERSION) \
! 370: -Dpackaging=jar \
! 371: -Dclassifier=$(JARSUFFIX) \
! 372: -DgeneratePom=true \
! 373: -DcreateChecksum=true
! 374:
! 375: # make .deb packages
! 376: deb: /usr/share/pyshared/stdeb all
! 377: (python setup.py --command-packages=stdeb.command bdist_deb)
! 378:
! 379: # install .deb packages
! 380: ideb:
! 381: (sudo dpkg -i deb_dist/*.deb)
! 382:
! 383: /usr/share/pyshared/stdeb: /usr/share/doc/python-all-dev
! 384: (sudo apt-get install python-stdeb)
! 385:
! 386: /usr/share/doc/python-all-dev:
! 387: (sudo apt-get install python-all-dev)
! 388:
! 389: minihttptestserver: minihttptestserver.o
! 390:
! 391: print-%:
! 392: @echo "$* = $($*)"
! 393:
! 394: ifneq ($(MAKECMDGOALS),clean)
! 395: -include $(DEPS)
! 396: endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>