Annotation of embedaddon/miniupnpd/miniupnpc/Makefile, revision 1.1.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>