version 1.1, 2012/02/21 23:16:22
|
version 1.1.1.3, 2023/09/27 11:21:37
|
Line 1
|
Line 1
|
# $Id$ |
# $Id$ |
# Miniupnp project. |
# Miniupnp project. |
# http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ | # http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/ |
# (c) 2005-2011 Thomas Bernard | # (c) 2005-2020 Thomas Bernard |
# This Makefile is made for MinGW |
# This Makefile is made for MinGW |
# |
# |
CC = gcc | # To cross compile on a *nix machine : |
#CFLAGS = -Wall -g -DDEBUG -D_WIN32_WINNT=0X501 | # make -f Makefile.mingw DLLWRAP=mingw32-dllwrap CC=mingw32-gcc AR=mingw32-ar WINDRES=mingw32-windres |
CFLAGS = -Wall -Os -DNDEBUG -D_WIN32_WINNT=0X501 | # |
| SRCDIR = src |
| INCDIR = include |
| |
| CC ?= gcc |
| SETUP_COMPILER_FLAG?= |
| DLLWRAP = dllwrap |
| WINDRES = windres |
| SH = /bin/sh |
| ZIP = zip |
| ifeq ($(OS),Windows_NT) |
| RM = del |
| else |
| RM = rm -f |
| endif |
| |
| CFLAGS ?= -Os |
| CFLAGS += -Wall |
| CFLAGS += -W -Wstrict-prototypes |
| |
| CPPFLAGS += -DNDEBUG -D_WIN32_WINNT=0x501 |
| CPPFLAGS += -Iinclude |
| CPPFLAGS += -I. |
| |
| # -liphlpapi is needed for GetBestRoute() and GetIpAddrTable() |
LDLIBS = -lws2_32 -liphlpapi |
LDLIBS = -lws2_32 -liphlpapi |
# -lwsock32 | |
# -liphlpapi is used for GetBestRoute() | |
PYTHON=\utils\python25\python |
PYTHON=\utils\python25\python |
OBJS=miniwget.o minixml.o igd_desc_parse.o minisoap.o \ |
OBJS=miniwget.o minixml.o igd_desc_parse.o minisoap.o \ |
|
minissdpc.o \ |
miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \ |
miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \ |
connecthostport.o portlistingparse.o receivedata.o | connecthostport.o portlistingparse.o receivedata.o \ |
OBJSDLL=$(addprefix dll/, $(OBJS)) | upnpdev.o addr_is_reserved.o |
| OBJSDLL=$(addprefix dll-, $(OBJS)) winres.o |
| BINARIES=upnpc-static.exe upnpc-shared.exe \ |
| listdevices-static.exe listdevices-shared.exe \ |
| miniupnpc.dll libminiupnpc.a \ |
| testminixml.exe |
| ifneq ($(GITHUB_SHA),) |
| COMMITREF=$(GITHUB_SHA) |
| else |
| ifneq ($(CI_COMMIT_SHORT_SHA),) |
| COMMITREF=$(CI_COMMIT_SHORT_SHA) |
| else |
| COMMITREF=$(shell git rev-parse --short HEAD) |
| endif |
| endif |
| DISTFILE:=$(shell echo "miniupnpc-bin-win32-`cat VERSION`-$(COMMITREF).zip") |
|
|
all: init upnpc-static upnpc-shared testminixml libminiupnpc.a miniupnpc.dll | LIBDIR ?= lib |
| # install directories |
| ifeq ($(strip $(PREFIX)),) |
| INSTALLPREFIX ?= /usr |
| else |
| INSTALLPREFIX ?= $(PREFIX) |
| endif |
|
|
init: | .PHONY: all dist clean |
mkdir dll | |
echo init > init | |
|
|
|
all: $(BINARIES) |
|
|
|
dist: $(DISTFILE) |
|
|
clean: |
clean: |
del upnpc testminixml *.o | $(RM) miniupnpcstrings.h |
del dll\*.o | $(RM) *.o |
del *.exe | $(RM) *.exe |
del miniupnpc.dll | $(RM) miniupnpc.dll miniupnpc.lib miniupnpc.dll.def |
del libminiupnpc.a | $(RM) libminiupnpc.a |
| $(RM) $(DISTFILE) |
|
|
|
$(DISTFILE): $(BINARIES) |
|
$(ZIP) $@ *.exe *.dll *.lib *.def *.a LICENSE README Changelog.txt |
|
|
libminiupnpc.a: $(OBJS) |
libminiupnpc.a: $(OBJS) |
$(AR) cr $@ $? |
$(AR) cr $@ $? |
|
|
pythonmodule: libminiupnpc.a |
pythonmodule: libminiupnpc.a |
$(PYTHON) setupmingw32.py build --compiler=mingw32 | $(PYTHON) setupmingw32.py build $(SETUP_COMPILER_FLAG) |
$(PYTHON) setupmingw32.py install --skip-build |
$(PYTHON) setupmingw32.py install --skip-build |
|
$(PYTHON) setupmingw32.py bdist_wheel --skip-build |
|
|
miniupnpc.dll: libminiupnpc.a $(OBJSDLL) | miniupnpc.dll: miniupnpc.def $(OBJSDLL) |
dllwrap -k --driver-name gcc \ | $(DLLWRAP) -k --driver-name $(CC) \ |
--def miniupnpc.def \ |
--def miniupnpc.def \ |
--output-def miniupnpc.dll.def \ |
--output-def miniupnpc.dll.def \ |
--implib miniupnpc.lib -o $@ \ |
--implib miniupnpc.lib -o $@ \ |
$(OBJSDLL) $(LDLIBS) |
$(OBJSDLL) $(LDLIBS) |
|
|
miniupnpc.lib: miniupnpc.dll |
miniupnpc.lib: miniupnpc.dll |
echo $@ generated with $< |
|
|
|
dll/upnpc.o: upnpc.o | %.o: $(SRCDIR)/%.c |
echo $@ generated with $< | $(CC) $(CFLAGS) $(CPPFLAGS) -DMINIUPNP_STATICLIB -c -o $@ $< |
|
|
.c.o: | dll-%.o: $(SRCDIR)/%.c |
$(CC) $(CFLAGS) -DSTATICLIB -c -o $@ $< | $(CC) $(CFLAGS) $(CPPFLAGS) -DMINIUPNP_EXPORTS -c -o $@ $< |
$(CC) $(CFLAGS) -DMINIUPNP_EXPORTS -c -o dll/$@ $< | |
|
|
upnpc.o: | %-shared.o: $(SRCDIR)/%.c |
$(CC) $(CFLAGS) -DSTATICLIB -c -o $@ $< | $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< |
$(CC) $(CFLAGS) -c -o dll/$@ $< | |
|
|
upnpc-static: upnpc.o libminiupnpc.a | # --enable-stdcall-fixup |
$(CC) -enable-stdcall-fixup -o $@ $^ $(LDLIBS) | %-static.exe: %.o libminiupnpc.a |
| $(CC) -static -o $@ $^ $(LDLIBS) |
|
|
upnpc-shared: dll/upnpc.o miniupnpc.lib | %-shared.exe: %-shared.o miniupnpc.lib |
$(CC) -enable-stdcall-fixup -o $@ $^ $(LDLIBS) | $(CC) -o $@ $^ $(LDLIBS) |
|
|
wingenminiupnpcstrings: wingenminiupnpcstrings.o | # To make miniupnpcstrings.h from miniupnpcstrings.h.in we either |
| # use a custom executable (if running make under windows) or use |
| # sed (if cross compiling from another platform). |
| ifeq ($(OS),Windows_NT) |
| wingenminiupnpcstrings.exe: wingenminiupnpcstrings.c |
| $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ |
|
|
wingenminiupnpcstrings.o: wingenminiupnpcstrings.c | miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings.exe VERSION |
| .\wingenminiupnpcstrings.exe $< $@ rc_version.h |
|
|
miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings | rc_version.h: miniupnpcstrings.h |
wingenminiupnpcstrings $< $@ | else |
| miniupnpcstrings.h: miniupnpcstrings.h.in VERSION |
| sed 's|OS_STRING ".*"|OS_STRING "Windows/Mingw32"|' $< | \ |
| sed 's|MINIUPNPC_VERSION_STRING ".*"|MINIUPNPC_VERSION_STRING "$(shell cat VERSION)"|' > $@ |
|
|
minixml.o: minixml.c minixml.h miniupnpcstrings.h | rc_version.h: VERSION |
| echo "#define LIBMINIUPNPC_DOTTED_VERSION \"$(shell cat VERSION)\"" > $@.tmp |
| echo "#define LIBMINIUPNPC_MAJOR_VERSION $(shell cat VERSION|cut -d. -f1)" >> $@.tmp |
| echo "#define LIBMINIUPNPC_MINOR_VERSION $(shell cat VERSION|cut -d. -f2)" >> $@.tmp |
| echo "#define LIBMINIUPNPC_MICRO_VERSION $(shell cat VERSION|cut -d. -f3)" >> $@.tmp |
| mv $@.tmp $@ |
| endif |
|
|
upnpc.o: upnpc.c miniwget.h minisoap.h miniupnpc.h igd_desc_parse.h upnpreplyparse.h upnpcommands.h upnperrors.h | miniupnpc.pc: VERSION |
| $(RM) $@ |
| echo "prefix=$(INSTALLPREFIX)" >> $@ |
| echo "exec_prefix=\$${prefix}" >> $@ |
| echo "libdir=\$${exec_prefix}/$(LIBDIR)" >> $@ |
| echo "includedir=\$${prefix}/include" >> $@ |
| echo "" >> $@ |
| echo "Name: miniUPnPc" >> $@ |
| echo "Description: UPnP IGD client lightweight library" >> $@ |
| echo "Version: $(shell cat VERSION)" >> $@ |
| echo "Libs: -L\$${libdir} -lminiupnpc" >> $@ |
| echo "Cflags: -I\$${includedir}" >> $@ |
|
|
miniwget.o: miniwget.c miniwget.h miniupnpcstrings.h connecthostport.h | winres.o: miniupnpc.rc rc_version.h |
| $(WINDRES) -D INTERNAL_NAME=\\\"miniupnpc.dll\\0\\\" -i $< -o $@ |
|
|
minisoap.o: minisoap.c minisoap.h miniupnpcstrings.h | testminixml.exe: testminixml.o minixml.o igd_desc_parse.o |
| $(CC) -static -o $@ $^ |
|
|
miniupnpc.o: miniupnpc.c miniupnpc.h minisoap.h miniwget.h minixml.h | minixml.o: $(SRCDIR)/minixml.c $(SRCDIR)/minixml.h |
|
|
igd_desc_parse.o: igd_desc_parse.c igd_desc_parse.h | upnpc.o: include/miniwget.h $(SRCDIR)/minisoap.h include/miniupnpc.h include/igd_desc_parse.h |
| upnpc.o: include/upnpreplyparse.h include/upnpcommands.h include/upnperrors.h miniupnpcstrings.h |
|
|
testminixml: minixml.o igd_desc_parse.o testminixml.c | miniwget.o: $(SRCDIR)/miniwget.c include/miniwget.h miniupnpcstrings.h $(SRCDIR)/connecthostport.h |
|
|
upnpreplyparse.o: upnpreplyparse.c upnpreplyparse.h minixml.h | minisoap.o: $(SRCDIR)/minisoap.c $(SRCDIR)/minisoap.h miniupnpcstrings.h |
|
|
upnpcommands.o: upnpcommands.c upnpcommands.h upnpreplyparse.h miniupnpc.h portlistingparse.h | miniupnpc.o: $(SRCDIR)/miniupnpc.c include/miniupnpc.h $(SRCDIR)/minisoap.h \ |
| include/miniwget.h $(SRCDIR)/minixml.h $(SRCDIR)/addr_is_reserved.h |
| |
| igd_desc_parse.o: $(SRCDIR)/igd_desc_parse.c include/igd_desc_parse.h |
| |
| upnpreplyparse.o: $(SRCDIR)/upnpreplyparse.c include/upnpreplyparse.h $(SRCDIR)/minixml.h |
| |
| upnpcommands.o: $(SRCDIR)/upnpcommands.c include/upnpcommands.h include/upnpreplyparse.h \ |
| include/miniupnpc.h include/portlistingparse.h |
| |
| minissdpc.o: $(SRCDIR)/minissdpc.c $(SRCDIR)/minissdpc.h $(SRCDIR)/receivedata.h |
| |
| upnpdev.o: $(SRCDIR)/upnpdev.c include/upnpdev.h |
|
|