Grass.make 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. #########################################################################
  2. # Variable names
  3. # xxxINCDIR directory(ies) including header files (example: /usr/include)
  4. # xxxINC cc option(s) for include directory (example: -I/usr/inlude)
  5. # xxxLIBDIR directory(ies) containing library (example: /usr/lib)
  6. # xxxLIBPATH cc option for library directory (example: -L/usr/lib)
  7. # xxx_LIBNAME library name (example: gis)
  8. # xxxLIB full static library path
  9. # (example: /home/abc/grass63/dist.i686-pc-linux-gnu/lib/libgis.a)
  10. # xxxDEP dependency
  11. #
  12. # GRASS_xxx GRASS specific (without ARCH_xxx)
  13. #
  14. # ARCH_xxx platform specific dirs (without GRASS_xxx)
  15. #
  16. # _xxx GRASS_xxx + ARCH_xxx
  17. #
  18. # ALLxxx all known for GRASS make system
  19. #
  20. #########################################################################
  21. RELDIR := $(subst $(GRASS_HOME)/,,$(CURDIR))
  22. # GRASS global directories and constants
  23. # platform specific dirs
  24. ARCH_DISTDIR = $(GRASS_HOME)/dist.$(ARCH)
  25. ARCH_BINDIR = $(GRASS_HOME)/bin.$(ARCH)
  26. GISBASE = $(ARCH_DISTDIR)
  27. ERRORLOG = $(GRASS_HOME)/error.log
  28. # include dirs
  29. ARCH_INCDIR = $(ARCH_DISTDIR)/include/grass
  30. INC = -I$(ARCH_DISTDIR)/include -I$(GISBASE)/include
  31. VECT_INC = $(PQINCPATH)
  32. # libraries
  33. ARCH_LIBDIR = $(ARCH_DISTDIR)/lib
  34. BASE_LIBDIR = $(GISBASE)/lib
  35. LIBPATH = -L$(ARCH_LIBDIR) -L$(BASE_LIBDIR)
  36. # object dir
  37. OBJDIR = OBJ.$(ARCH)
  38. LIB_RUNTIME_DIR = $(GISBASE)/lib
  39. RUN_GISRC = $(GISBASE)/demolocation/.grassrc$(GRASS_VERSION_MAJOR)$(GRASS_VERSION_MINOR)
  40. #########################################################################
  41. # these define the various directories which contain GRASS programs
  42. # or files used by GRASS programs
  43. BIN = $(ARCH_DISTDIR)/bin
  44. DRIVERDIR = $(ARCH_DISTDIR)/driver
  45. DBDRIVERDIR = $(ARCH_DISTDIR)/driver/db
  46. DOCSDIR = $(ARCH_DISTDIR)/docs
  47. ETC = $(ARCH_DISTDIR)/etc
  48. GUIDIR = $(ARCH_DISTDIR)/gui
  49. HTMLDIR = $(ARCH_DISTDIR)/docs/html
  50. SCRIPTDIR = $(ARCH_DISTDIR)/scripts
  51. MSG_DIR = $(ARCH_DISTDIR)/etc/msgs
  52. MO_DIR = $(ARCH_DISTDIR)/locale
  53. TOOLSDIR = $(ARCH_DISTDIR)/tools
  54. FONTDIR = $(ARCH_DISTDIR)/fonts
  55. GRASS_VERSION_NUMBER = $(GRASS_VERSION_MAJOR).$(GRASS_VERSION_MINOR).$(GRASS_VERSION_RELEASE)
  56. GRASS_VERSION_NAME = $(GRASS_VERSION_MAJOR)$(GRASS_VERSION_MINOR)$(GRASS_VERSION_RELEASE)
  57. GRASS_NAME = grass$(GRASS_VERSION_MAJOR)$(GRASS_VERSION_MINOR)
  58. ##################### other #############################################
  59. COMPILE_FLAGS_C = $(CPPFLAGS) $(CFLAGS) $(INCLUDE_DIRS) $(INC)
  60. COMPILE_FLAGS_CXX = $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_DIRS) $(INC)
  61. LDFLAGS = $(LIBPATH) $(LINK_FLAGS) $(LD_SEARCH_FLAGS)
  62. VECT_CFLAGS = $(GDALCFLAGS) $(GEOSCFLAGS)
  63. # Object with _fmode which must be linked to each executable on Windows
  64. ifdef MINGW
  65. WINDRES = windres
  66. FMODE_OBJ = $(BASE_LIBDIR)/fmode.o
  67. # if fmode.o causes trouble, try:
  68. # FMODE_OBJ = /lib/binmode.o
  69. MANIFEST_OBJ = $(OBJDIR)/$(basename $(notdir $@)).manifest.res
  70. MANIFEST = internal
  71. endif
  72. # lexical analyzer and default options
  73. LFLAGS =
  74. # parser generator and default options
  75. YFLAGS = -d -v
  76. MANSECT = 1
  77. MANBASEDIR = $(ARCH_DISTDIR)/docs/man
  78. MANDIR = $(MANBASEDIR)/man$(MANSECT)
  79. HTML2MAN = VERSION_NUMBER=$(GRASS_VERSION_NUMBER) $(GISBASE)/tools/g.html2man.py
  80. GDAL_LINK = $(USE_GDAL)
  81. GDAL_DYNAMIC = 1
  82. DEPFILE = depend.mk
  83. ##################### library switches ##################################
  84. libs = \
  85. ARRAYSTATS:arraystats \
  86. BASIC:basic \
  87. BITMAP:bitmap \
  88. BTREE:btree \
  89. BTREE2:btree2 \
  90. CAIRODRIVER:cairodriver \
  91. CALC:calc \
  92. CDHC:cdhc \
  93. CCMATH:ccmath \
  94. CLUSTER:cluster \
  95. COORCNV:coorcnv \
  96. DATETIME:datetime \
  97. DBDIALOG:dbdialog \
  98. DBMIBASE:dbmibase \
  99. DBMICLIENT:dbmiclient \
  100. DBMIDRIVER:dbmidriver \
  101. DBSTUBS:dbstubs \
  102. DIG2:dig2 \
  103. DIG:dig \
  104. DISPLAY:display \
  105. DLG:dlg \
  106. DRIVER:driver \
  107. DSPF:dspf \
  108. RASTER3D:g3d \
  109. GIS:gis \
  110. GMATH:gmath \
  111. GPDE:gpde \
  112. GPROJ:gproj \
  113. GRAPH:dgl \
  114. HTMLDRIVER:htmldriver \
  115. IBTREE:ibtree \
  116. ICON:icon \
  117. IMAGERY:imagery \
  118. INTERPDATA:interpdata \
  119. INTERPFL:interpfl \
  120. IORTHO:iortho \
  121. ISMAP:ismap \
  122. LIA:lia \
  123. LIDAR:lidar \
  124. LINKM:linkm \
  125. LOCK:lock \
  126. LRS:lrs \
  127. MANAGE:manage \
  128. NVIZ:nviz \
  129. OGSF:ogsf \
  130. OPTRI:optri \
  131. PNGDRIVER:pngdriver \
  132. PSDRIVER:psdriver \
  133. QTREE:qtree \
  134. RASTER:raster \
  135. RLI:rli \
  136. ROWIO:rowio \
  137. RTREE:rtree \
  138. SEGMENT:segment \
  139. SHAPE:shape \
  140. SIM:sim \
  141. SITES:sites \
  142. SOS:sos \
  143. SQLP:sqlp \
  144. STATS:stats \
  145. SYMB:symb \
  146. TEMPORAL:temporal \
  147. VECTOR:vector \
  148. VEDIT:vedit \
  149. NETA:neta \
  150. XDISPLAY:xdisplay \
  151. XGD:xgd \
  152. XGI:xgi \
  153. XPM:xpm \
  154. IOSTREAM:iostream
  155. ARRAYSTATSDEPS = $(GISLIB) $(MATHLIB)
  156. BITMAPDEPS = $(LINKMLIB)
  157. BTREE2DEPS = $(GISLIB)
  158. CAIRODRIVERDEPS = $(DRIVERLIB) $(GISLIB) $(CAIROLIB) $(FCLIB) $(ICONVLIB)
  159. CALCDEPS = $(RASTERLIB) $(GISLIB) $(MATHLIB)
  160. CDHCDEPS = $(MATHLIB)
  161. CLUSTERDEPS = $(IMAGERYLIB) $(RASTERLIB) $(GISLIB) $(MATHLIB)
  162. DBMIBASEDEPS = $(GISLIB)
  163. DBMICLIENTDEPS = $(DBMIBASELIB) $(GISLIB)
  164. DBMIDRIVERDEPS = $(DBMIBASELIB) $(DBSTUBSLIB) $(GISLIB)
  165. DBSTUBSDEPS = $(DBMIBASELIB) $(GISLIB)
  166. DIG2DEPS = $(GISLIB) $(RTREELIB) $(MATHLIB)
  167. DISPLAYDEPS = $(HTMLDRIVERLIB) $(PNGDRIVERLIB) $(PSDRIVERLIB) $(DRIVERLIB) $(RASTERLIB) $(GISLIB) $(MATHLIB)
  168. DRIVERDEPS = $(GISLIB) $(FTLIB) $(ICONVLIB) $(MATHLIB)
  169. DSPFDEPS = $(GISLIB)
  170. FORMDEPS = $(DBMILIB) $(GISLIB)
  171. RASTER3DDEPS = $(RASTERLIB) $(GISLIB)
  172. GISDEPS = $(DATETIMELIB) $(ZLIBLIBPATH) $(ZLIB) $(BZLIB) $(INTLLIB) $(REGEXLIBPATH) $(REGEXLIB) $(ICONVLIB) $(PTHREADLIBPATH) $(PTHREADLIB) $(MATHLIB)
  173. GMATHDEPS = $(GISLIB) $(FFTWLIB) $(LAPACKLIB) $(BLASLIB) $(CCMATHLIB) $(OMPLIBPATH) $(OMPLIB)
  174. GPDEDEPS = $(RASTER3DLIB) $(RASTERLIB) $(GISLIB) $(GMATHLIB) $(OMPLIBPATH) $(OMPLIB) $(MATHLIB)
  175. GPROJDEPS = $(GISLIB) $(GDALLIBS) $(PROJLIB) $(MATHLIB)
  176. HTMLDRIVERDEPS = $(DRIVERLIB) $(GISLIB) $(MATHLIB)
  177. IMAGERYDEPS = $(GISLIB) $(MATHLIB) $(RASTERLIB) $(VECTORLIB)
  178. INTERPFLDEPS = $(BITMAPLIB) $(DBMILIB) $(GMATHLIB) $(INTERPDATALIB) $(QTREELIB) $(VECTORLIB) $(RASTERLIB) $(GISLIB) $(MATHLIB)
  179. #IORTHODEPS = $(IMAGERYLIB) $(GISLIB)
  180. IOSTREAMDEPS = $(GISLIB)
  181. LIDARDEPS = $(VECTORLIB) $(DBMILIB) $(GMATHLIB) $(RASTERLIB) $(SEGMENTLIB) $(GISLIB) $(MATHLIB)
  182. LRSDEPS = $(DBMILIB) $(GISLIB)
  183. MANAGEDEPS = $(VECTORLIB) $(GISLIB)
  184. NVIZDEPS = $(OGSFLIB) $(GISLIB) $(OPENGLLIB)
  185. OGSFDEPS = $(BITMAPLIB) $(RASTER3DLIB) $(VECTORLIB) $(DBMILIB) $(RASTERLIB) $(GISLIB) $(TIFFLIBPATH) $(TIFFLIB) $(OPENGLLIB) $(OPENGLULIB) $(MATHLIB)
  186. PNGDRIVERDEPS = $(DRIVERLIB) $(GISLIB) $(PNGLIB) $(MATHLIB)
  187. PSDRIVERDEPS = $(DRIVERLIB) $(GISLIB) $(MATHLIB)
  188. RASTERDEPS = $(GISLIB) $(MATHLIB)
  189. RLIDEPS = $(RASTERLIB) $(GISLIB) $(MATHLIB)
  190. ROWIODEPS = $(GISLIB)
  191. RTREEDEPS = $(GISLIB) $(MATHLIB)
  192. SEGMENTDEPS = $(GISLIB)
  193. SIMDEPS = $(VECTORLIB) $(RASTERLIB)
  194. SITESDEPS = $(VECTORLIB) $(DBMILIB) $(GISLIB) $(DATETIMELIB)
  195. STATSDEPS = $(RASTERLIB) $(GISLIB) $(MATHLIB)
  196. SYMBDEPS = $(GISLIB) $(MATHLIB)
  197. TEMPORALDEPS = $(DBMILIB) $(GISLIB) $(DATETIMELIB)
  198. VECTORDEPS = $(DBMILIB) $(GRAPHLIB) $(DIG2LIB) $(LINKMLIB) $(RTREELIB) $(GISLIB) $(GEOSLIBS) $(GDALLIBS) $(MATHLIB) $(BTREE2LIB) $(GPROJLIB) $(RASTERLIB) $(PQLIBPATH) $(PQLIB)
  199. VEDITDEPS = $(VECTORLIB) $(DBMILIB) $(GISLIB) $(MATHLIB)
  200. NETADEPS = $(VECTORLIB) $(DBMILIB) $(GISLIB)
  201. ifneq ($(USE_X11),)
  202. CAIRODRIVERDEPS += $(XLIBPATH) $(XLIB) $(XEXTRALIBS)
  203. endif
  204. ifneq ($(USE_CAIRO),)
  205. DISPLAYDEPS += $(CAIRODRIVERLIB)
  206. endif
  207. ifneq ($(GDAL_LINK),)
  208. ifneq ($(GDAL_DYNAMIC),)
  209. ifneq ($(MINGW),)
  210. RASTERDEPS += -lkernel32
  211. else
  212. RASTERDEPS += $(DLLIB)
  213. endif
  214. else
  215. RASTERDEPS += $(GDALLIBS)
  216. endif
  217. endif
  218. ifeq ($(OPENGL_WINDOWS),1)
  219. NVIZDEPS += -lgdi32
  220. endif
  221. ifneq ($(OPENGL_X11),)
  222. NVIZDEPS += $(XLIBPATH) $(XLIB) $(XEXTRALIBS)
  223. endif
  224. ifeq ($(GRASS_LIBRARY_TYPE),stlib)
  225. NEED_DEPS = 1
  226. LIB_PREFIX = $(STLIB_PREFIX)
  227. LIB_SUFFIX = $(STLIB_SUFFIX)
  228. else
  229. LIB_PREFIX = $(SHLIB_PREFIX)
  230. LIB_SUFFIX = $(SHLIB_SUFFIX)
  231. endif
  232. define lib_rules
  233. $(1)_LIBNAME = grass_$(2).$(GRASS_VERSION_NUMBER)
  234. ifneq ($(NEED_DEPS),)
  235. $(1)LIB = -l$$($(1)_LIBNAME) $$($(1)DEPS)
  236. else
  237. $(1)LIB = -l$$($(1)_LIBNAME)
  238. endif
  239. ifneq ($(1),IOSTREAM)
  240. $(1)DEP = $$(BASE_LIBDIR)/$$(LIB_PREFIX)$$($(1)_LIBNAME)$$(LIB_SUFFIX)
  241. else
  242. $(1)DEP = $$(BASE_LIBDIR)/$$(STLIB_PREFIX)$$($(1)_LIBNAME)$$(STLIB_SUFFIX)
  243. endif
  244. endef
  245. $(foreach lib,$(libs),$(eval $(call lib_rules,$(firstword $(subst :, ,$(lib))),$(lastword $(subst :, ,$(lib))))))
  246. ifneq ($(MINGW),)
  247. GISLIB += $(INTLLIB)
  248. endif
  249. DBMILIB = $(DBMICLIENTLIB) $(DBMIBASELIB) $(DBMIEXTRALIB)
  250. GEOMLIB = $(OPTRILIB) $(SOSLIB) $(LIALIB) $(BASICLIB)
  251. DBMIDEPS = $(DBMICLIENTDEPS) $(DBMIBASEDEPS)
  252. GEOMDEPS = $(OPTRIDEPS) $(SOSDEPS) $(LIADEPS) $(BASICDEPS)