Install.make 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. # This should be "include"d from the top-level Makefile, and nowhere else
  2. BIN_DIST_FILES = $(FILES) \
  3. $(GRASS_NAME).tmp \
  4. bin \
  5. demolocation \
  6. docs \
  7. driver \
  8. etc \
  9. fonts \
  10. include \
  11. lib \
  12. scripts \
  13. tools \
  14. locale
  15. # Shell commands
  16. MAKE_DIR_CMD = $(MKDIR) -m 755
  17. strip: strip-check
  18. find $(ARCH_DISTDIR) -type f -perm +111 -print0 | xargs -0 strip
  19. strip-check:
  20. @ if [ ! -f "$(ARCH_BINDIR)/$(GRASS_NAME)" ] ; then \
  21. echo "ERROR: GRASS has not been compiled. Try \"make\" first." >&2 ; \
  22. echo " Strip aborted, exiting Make." >&2 ; \
  23. exit 1; \
  24. fi
  25. install:
  26. @ echo $(ARCH_BINDIR)/$(GRASS_NAME)
  27. $(MAKE) install-check-built
  28. ifeq ($(strip $(MACOSX_APP)),1)
  29. $(MAKE) install-macosx
  30. else
  31. $(MAKE) install-check-parent
  32. $(MAKE) install-check-writable
  33. $(MAKE) install-check-prefix
  34. $(MAKE) real-install
  35. endif
  36. install-check-built:
  37. @ if [ ! -f "$(ARCH_BINDIR)/$(GRASS_NAME)" ] ; then \
  38. echo "ERROR: GRASS has not been compiled. Try \"make\" first."; \
  39. echo " Installation aborted, exiting Make."; \
  40. exit; \
  41. fi
  42. install-check-parent:
  43. @ INST_PATH=`dirname $(INST_DIR)`; \
  44. while [ ! -d "$$INST_PATH" ]; do \
  45. INST_PATH=`dirname $$INST_PATH`; \
  46. done; \
  47. if [ ! -d "$(INST_DIR)" -a ! -w "$$INST_PATH" ] ; then \
  48. echo "ERROR: Directory $$INST_PATH is a parent directory of your" >&2 ; \
  49. echo " install directory $(INST_DIR) and is not writable." >&2 ; \
  50. echo " Perhaps you need root access." >&2 ; \
  51. echo " Installation aborted, exiting Make." >&2 ; \
  52. exit 1; \
  53. fi
  54. install-check-writable:
  55. @ if [ -d "$(INST_DIR)" -a ! -w "$(INST_DIR)" ] ; then \
  56. echo "ERROR: Your install directory $(INST_DIR) is not writable." >&2 ; \
  57. echo " Perhaps you need root access." >&2 ; \
  58. echo " Installation aborted, exiting Make." >&2 ; \
  59. exit 1; \
  60. fi
  61. install-check-prefix:
  62. @ result=`echo "$(INST_DIR)" | awk '{ if ($$1 ~ /grass/) print $$1 }'`; \
  63. if [ "$$result" = "" ] ; then \
  64. echo "WARNING: Your install directory $(INST_DIR)" >&2 ; \
  65. echo " does not contain the word 'grass'." >&2 ; \
  66. echo " It is highly recommended that the word 'grass' be part" >&2 ; \
  67. echo " of your install directory to avoid conflicts." >&2 ; \
  68. echo " Do you want to continue? [y/n]" >&2 ; \
  69. read ans; \
  70. if [ "$$ans" != "y" -a "$$ans" != "Y" ] ; then \
  71. echo "Installation aborted, exiting Make." >&2 ; \
  72. exit 1; \
  73. fi; \
  74. fi
  75. ifneq ($(strip $(MINGW)),)
  76. STARTUP = $(INST_DIR)/etc/$(GRASS_NAME).py
  77. else
  78. STARTUP = $(UNIX_BIN)/$(GRASS_NAME)
  79. endif
  80. FONTCAP = etc/fontcap
  81. TMPGISRC = demolocation/.grassrc$(GRASS_VERSION_MAJOR)$(GRASS_VERSION_MINOR)
  82. PLATMAKE = include/Make/Platform.make
  83. GRASSMAKE = include/Make/Grass.make
  84. real-install: | $(INST_DIR) $(UNIX_BIN)
  85. -tar cBCf $(GISBASE) - . | tar xBCf $(INST_DIR) - 2>/dev/null
  86. -rm $(INST_DIR)/$(GRASS_NAME).tmp
  87. $(MAKE) $(STARTUP)
  88. -rm $(INST_DIR)/$(FONTCAP)
  89. $(MAKE) $(INST_DIR)/$(FONTCAP)
  90. -rm $(INST_DIR)/$(TMPGISRC)
  91. $(MAKE) $(INST_DIR)/$(TMPGISRC)
  92. -rm $(INST_DIR)/$(PLATMAKE)
  93. $(MAKE) $(INST_DIR)/$(PLATMAKE)
  94. -rm $(INST_DIR)/$(GRASSMAKE)
  95. $(MAKE) $(INST_DIR)/$(GRASSMAKE)
  96. -$(INSTALL) config.status $(INST_DIR)/config.status
  97. -$(CHMOD) -R a+rX $(INST_DIR) 2>/dev/null
  98. ifneq ($(findstring darwin,$(ARCH)),)
  99. @# enable OSX Help Viewer
  100. @/bin/ln -sfh "$(INST_DIR)/docs/html" /Library/Documentation/Help/GRASS-$(GRASS_VERSION_MAJOR).$(GRASS_VERSION_MINOR)
  101. endif
  102. $(INST_DIR) $(UNIX_BIN):
  103. $(MAKE_DIR_CMD) $@
  104. $(STARTUP): $(ARCH_DISTDIR)/$(GRASS_NAME).tmp
  105. sed -e 's#'@GISBASE@'#'$(INST_DIR)'#g' \
  106. -e 's#'@LD_LIBRARY_PATH_VAR@'#'$(LD_LIBRARY_PATH_VAR)'#g' \
  107. -e 's#'@CONFIG_PROJSHARE@'#'$(PROJSHARE)'#g' \
  108. $< > $@
  109. -$(CHMOD) a+x $@
  110. define fix_gisbase
  111. sed -e 's#$(GISBASE)#$(INST_DIR)#g' $< > $@
  112. endef
  113. define fix_grass_home
  114. sed -e 's#^\(GRASS_HOME.[^=]*\).*#\1= $(INST_DIR)#g' \
  115. -e 's#$(GISBASE)#$(INST_DIR)#g' $< > $@
  116. endef
  117. define fix_grass_arch
  118. sed -e 's#^\(ARCH_DISTDIR.[^=]*\).*#\1= $(INST_DIR)#g' \
  119. -e 's#^\(ARCH_BINDIR.[^=]*\).*#\1= $(UNIX_BIN)#g' $< > $@
  120. endef
  121. $(INST_DIR)/$(FONTCAP): $(GISBASE)/$(FONTCAP)
  122. $(call fix_gisbase)
  123. $(INST_DIR)/$(TMPGISRC): $(GISBASE)/$(TMPGISRC)
  124. $(call fix_gisbase)
  125. $(INST_DIR)/$(PLATMAKE): $(GISBASE)/$(PLATMAKE)
  126. $(call fix_grass_home)
  127. $(INST_DIR)/$(GRASSMAKE): $(GISBASE)/$(GRASSMAKE)
  128. $(call fix_grass_arch)
  129. install-macosx:
  130. $(MAKE) -C macosx install-macosx
  131. install-strip:
  132. $(MAKE) strip
  133. $(MAKE) install
  134. bindist:
  135. ifeq ($(strip $(MACOSX_APP)),1)
  136. $(MAKE) bindist-macosx
  137. else
  138. $(MAKE) real-bindist
  139. endif
  140. BINDISTNAME = grass-$(GRASS_VERSION_NUMBER)-$(ARCH)-$(DATE)
  141. real-bindist:
  142. -tar cCBf $(ARCH_DISTDIR) - $(BIN_DIST_FILES) | gzip -fc > $(BINDISTNAME).tar.gz
  143. -size=`ls -l $(BINDISTNAME).tar.gz | awk '{print $$5}'`; \
  144. sed -e "s/BIN_DIST_VERSION/$(GRASS_VERSION_NUMBER)-$(ARCH)-$(DATE)/" \
  145. -e "s/GRASSPRG_NAME/$(GRASS_NAME)/" \
  146. -e "s/SIZE_TAR_FILE/$$size/" -e "s#BIN_DIST_DIR#'$(INST_DIR)'#" \
  147. -e "s/ARCHITECTURE/$(ARCH)/" \
  148. -e "s/LD_LIBRARY_PATH_VAR/$(LD_LIBRARY_PATH_VAR)/" \
  149. -e "s/TEST_STR=/TEST_STR=executable/" \
  150. -e "s#IMPORTANT.*#Generated from the binaryInstall.src file using the command make bindist#" \
  151. -e "s/# executable shell.*//" -e "s/# make bindist.*//" \
  152. binaryInstall.src > $(BINDISTNAME)-install.sh ; \
  153. chmod a+x $(BINDISTNAME)-install.sh 2>/dev/null
  154. bindist-macosx:
  155. $(MAKE) -C macosx bindist-macosx
  156. # make a source package for distribution:
  157. srcdist: distclean
  158. -$(MAKE_DIR_CMD) ./grass-$(GRASS_VERSION_NUMBER)
  159. @ # needed to store code in package with grass-version path:
  160. -mv * ./grass-$(GRASS_VERSION_NUMBER)
  161. @ # do not include the debian control files:
  162. -mv ./grass-$(GRASS_VERSION_NUMBER)/debian .
  163. @ #we use -h to get the linked files into as real files:
  164. tar cvfzh grass-$(GRASS_VERSION_NUMBER).tar.gz ./grass-$(GRASS_VERSION_NUMBER)/* --exclude=.svn
  165. @ # restore src code location:
  166. -mv ./grass-$(GRASS_VERSION_NUMBER)/* .
  167. -rmdir ./grass-$(GRASS_VERSION_NUMBER)
  168. @ echo "Distribution source package: grass-$(GRASS_VERSION_NUMBER).tar.gz ready. Calculating MD5 sum..."
  169. md5sum grass-$(GRASS_VERSION_NUMBER).tar.gz > grass-$(GRASS_VERSION_NUMBER).md5sum
  170. # make a source package for library distribution:
  171. srclibsdist: distclean
  172. -$(MAKE_DIR_CMD) ./grass-lib-$(GRASS_VERSION_NUMBER)
  173. @ # needed to store code in package with grass-version path:
  174. -cp -L * ./grass-lib-$(GRASS_VERSION_NUMBER)
  175. -cp -rL tools ./grass-lib-$(GRASS_VERSION_NUMBER)
  176. -cp -rL demolocation ./grass-lib-$(GRASS_VERSION_NUMBER)
  177. -cp -rL include ./grass-lib-$(GRASS_VERSION_NUMBER)
  178. -cp -rL --parents lib/external/shapelib ./grass-lib-$(GRASS_VERSION_NUMBER)
  179. -cp -rL --parents lib/external/bwidget ./grass-lib-$(GRASS_VERSION_NUMBER)
  180. -cp -rL --parents lib/datetime ./grass-lib-$(GRASS_VERSION_NUMBER)
  181. -cp -rL --parents lib/db ./grass-lib-$(GRASS_VERSION_NUMBER)
  182. -cp -rL --parents lib/gis ./grass-lib-$(GRASS_VERSION_NUMBER)
  183. -cp -rL --parents lib/linkm ./grass-lib-$(GRASS_VERSION_NUMBER)
  184. -cp -rL --parents lib/form ./grass-lib-$(GRASS_VERSION_NUMBER)
  185. -cp -rL --parents lib/vector ./grass-lib-$(GRASS_VERSION_NUMBER)
  186. -cp -rL --parents db/drivers ./grass-lib-$(GRASS_VERSION_NUMBER)
  187. tar chvfz grass-lib-$(GRASS_VERSION_NUMBER).tar.gz ./grass-lib-$(GRASS_VERSION_NUMBER)/* --exclude=CVS
  188. -rm -r ./grass-lib-$(GRASS_VERSION_NUMBER)
  189. @ echo "Distribution source package: grass-lib-$(GRASS_VERSION_NUMBER).tar.gz ready."
  190. .PHONY: strip strip-check
  191. .PHONY: install-check-built install-check-parent install-check-writable install-check-prefix
  192. .PHONY: install real-install install-strip install-macosx
  193. .PHONY: bindist real-bindist bindist-macosx srcdist srclibsdist