Makefile 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. # $Id: Makefile,v 1.23 2013/11/26 16:38:15 nanard Exp $
  2. # This Makefile is designed for use with GNU make
  3. # libnatpmp
  4. # (c) 2007-2013 Thomas Bernard
  5. # http://miniupnp.free.fr/libnatpmp.html
  6. OS = $(shell uname -s)
  7. CC = gcc
  8. INSTALL = install -p
  9. ARCH = $(shell uname -m | sed -e s/i.86/i686/)
  10. VERSION = $(shell cat VERSION)
  11. ifeq ($(OS), Darwin)
  12. JARSUFFIX=mac
  13. endif
  14. ifeq ($(OS), Linux)
  15. JARSUFFIX=linux
  16. endif
  17. ifneq (,$(findstring WIN,$(OS)))
  18. JARSUFFIX=win32
  19. endif
  20. # APIVERSION is used in soname
  21. APIVERSION = 1
  22. #LDFLAGS = -Wl,--no-undefined
  23. CFLAGS ?= -Os
  24. #CFLAGS = -g -O0
  25. CFLAGS += -fPIC
  26. CFLAGS += -Wall
  27. #CFLAGS += -Wextra
  28. CFLAGS += -DENABLE_STRNATPMPERR
  29. #CFLAGS += -Wstrict-aliasing
  30. LIBOBJS = natpmp.o getgateway.o
  31. OBJS = $(LIBOBJS) testgetgateway.o natpmpc.o natpmp-jni.o
  32. STATICLIB = libnatpmp.a
  33. ifeq ($(OS), Darwin)
  34. SHAREDLIB = libnatpmp.dylib
  35. JNISHAREDLIB = libjninatpmp.dylib
  36. SONAME = $(basename $(SHAREDLIB)).$(APIVERSION).dylib
  37. CFLAGS := -DMACOSX -D_DARWIN_C_SOURCE $(CFLAGS)
  38. SONAMEFLAGS=-Wl,-install_name,$(JNISHAREDLIB) -dynamiclib -framework JavaVM
  39. else
  40. ifneq (,$(findstring WIN,$(OS)))
  41. SHAREDLIB = natpmp.dll
  42. JNISHAREDLIB = jninatpmp.dll
  43. CC = i686-w64-mingw32-gcc
  44. EXTRA_LD = -lws2_32 -lIphlpapi -Wl,--no-undefined -Wl,--enable-runtime-pseudo-reloc --Wl,kill-at
  45. else
  46. SHAREDLIB = libnatpmp.so
  47. JNISHAREDLIB = libjninatpmp.so
  48. SONAME = $(SHAREDLIB).$(APIVERSION)
  49. SONAMEFLAGS=-Wl,-soname,$(JNISHAREDLIB)
  50. endif
  51. endif
  52. HEADERS = natpmp.h
  53. EXECUTABLES = testgetgateway natpmpc-shared natpmpc-static
  54. INSTALLPREFIX ?= $(PREFIX)/usr
  55. INSTALLDIRINC = $(INSTALLPREFIX)/include
  56. INSTALLDIRLIB = $(INSTALLPREFIX)/lib
  57. INSTALLDIRBIN = $(INSTALLPREFIX)/bin
  58. JAVA ?= java
  59. JAVAC ?= javac
  60. JAVAH ?= javah
  61. JAVAPACKAGE = fr/free/miniupnp/libnatpmp
  62. JAVACLASSES = $(JAVAPACKAGE)/NatPmp.class $(JAVAPACKAGE)/NatPmpResponse.class $(JAVAPACKAGE)/LibraryExtractor.class $(JAVAPACKAGE)/URLUtils.class
  63. JNIHEADERS = fr_free_miniupnp_libnatpmp_NatPmp.h
  64. .PHONY: all clean depend install cleaninstall installpythonmodule
  65. all: $(STATICLIB) $(SHAREDLIB) $(EXECUTABLES)
  66. pythonmodule: $(STATICLIB) libnatpmpmodule.c setup.py
  67. python setup.py build
  68. touch $@
  69. installpythonmodule: pythonmodule
  70. python setup.py install
  71. clean:
  72. $(RM) $(OBJS) $(EXECUTABLES) $(STATICLIB) $(SHAREDLIB) $(JAVACLASSES) $(JNISHAREDLIB)
  73. $(RM) pythonmodule
  74. $(RM) -r build/ dist/ libraries/
  75. depend:
  76. makedepend -f$(MAKEFILE_LIST) -Y $(OBJS:.o=.c) 2>/dev/null
  77. install: $(HEADERS) $(STATICLIB) $(SHAREDLIB) natpmpc-shared
  78. $(INSTALL) -d $(INSTALLDIRINC)
  79. $(INSTALL) -m 644 $(HEADERS) $(INSTALLDIRINC)
  80. $(INSTALL) -d $(INSTALLDIRLIB)
  81. $(INSTALL) -m 644 $(STATICLIB) $(INSTALLDIRLIB)
  82. $(INSTALL) -m 644 $(SHAREDLIB) $(INSTALLDIRLIB)/$(SONAME)
  83. $(INSTALL) -d $(INSTALLDIRBIN)
  84. $(INSTALL) -m 755 natpmpc-shared $(INSTALLDIRBIN)/natpmpc
  85. ln -s -f $(SONAME) $(INSTALLDIRLIB)/$(SHAREDLIB)
  86. $(JNIHEADERS): fr/free/miniupnp/libnatpmp/NatPmp.class
  87. $(JAVAH) -jni fr.free.miniupnp.libnatpmp.NatPmp
  88. %.class: %.java
  89. $(JAVAC) -cp . $<
  90. $(JNISHAREDLIB): $(SHAREDLIB) $(JNIHEADERS) $(JAVACLASSES)
  91. ifeq (,$(JAVA_HOME))
  92. @echo "Check your JAVA_HOME environement variable" && false
  93. endif
  94. ifneq (,$(findstring WIN,$(OS)))
  95. $(CC) -m32 -D_JNI_Implementation_ -Wl,--kill-at \
  96. -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/win32" \
  97. natpmp-jni.c -shared \
  98. -o $(JNISHAREDLIB) -L. -lnatpmp -lws2_32 -lIphlpapi
  99. else
  100. $(CC) $(CFLAGS) -c -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/win32" natpmp-jni.c
  101. $(CC) $(CFLAGS) -o $(JNISHAREDLIB) -shared $(SONAMEFLAGS) natpmp-jni.o -lc -L. -lnatpmp
  102. endif
  103. jar: $(JNISHAREDLIB)
  104. find fr -name '*.class' -print > classes.list
  105. $(eval JNISHAREDLIBPATH := $(shell java fr.free.miniupnp.libnatpmp.LibraryExtractor))
  106. mkdir -p libraries/$(JNISHAREDLIBPATH)
  107. mv $(JNISHAREDLIB) libraries/$(JNISHAREDLIBPATH)/$(JNISHAREDLIB)
  108. jar cf natpmp_$(JARSUFFIX).jar @classes.list libraries/$(JNISHAREDLIBPATH)/$(JNISHAREDLIB)
  109. $(RM) classes.list
  110. jnitest: $(JNISHAREDLIB) JavaTest.class
  111. $(RM) libjninatpmp.so
  112. $(JAVA) -Djna.nosys=true -cp . JavaTest
  113. mvn_install:
  114. mvn install:install-file -Dfile=java/natpmp_$(JARSUFFIX).jar \
  115. -DgroupId=com.github \
  116. -DartifactId=natpmp \
  117. -Dversion=$(VERSION) \
  118. -Dpackaging=jar \
  119. -Dclassifier=$(JARSUFFIX) \
  120. -DgeneratePom=true \
  121. -DcreateChecksum=true
  122. cleaninstall:
  123. $(RM) $(addprefix $(INSTALLDIRINC), $(HEADERS))
  124. $(RM) $(INSTALLDIRLIB)/$(SONAME)
  125. $(RM) $(INSTALLDIRLIB)/$(SHAREDLIB)
  126. $(RM) $(INSTALLDIRLIB)/$(STATICLIB)
  127. testgetgateway: testgetgateway.o getgateway.o
  128. $(CC) $(LDFLAGS) -o $@ $^ $(EXTRA_LD)
  129. natpmpc-static: natpmpc.o $(STATICLIB)
  130. $(CC) $(LDFLAGS) -o $@ $^ $(EXTRA_LD)
  131. natpmpc-shared: natpmpc.o $(SHAREDLIB)
  132. $(CC) $(LDFLAGS) -o $@ $^ $(EXTRA_LD)
  133. $(STATICLIB): $(LIBOBJS)
  134. $(AR) crs $@ $?
  135. $(SHAREDLIB): $(LIBOBJS)
  136. ifeq ($(OS), Darwin)
  137. $(CC) -dynamiclib -Wl,-install_name,$(SONAME) -o $@ $^
  138. else
  139. $(CC) -shared -Wl,-soname,$(SONAME) -o $@ $^ $(EXTRA_LD)
  140. endif
  141. # DO NOT DELETE
  142. natpmp.o: natpmp.h getgateway.h declspec.h
  143. getgateway.o: getgateway.h declspec.h
  144. testgetgateway.o: getgateway.h declspec.h
  145. natpmpc.o: natpmp.h