Makefile.repo 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. # $Id$
  2. REPOFORGE := repoforge
  3. include package.$(REPOFORGE)
  4. PWD := $(shell pwd)
  5. WORK_DIR := work
  6. TEMP_DIR := temp
  7. BUILD_DIR := build
  8. # Function to find out absolute path
  9. absname = $(if $(filter /%,$(1)),$(1),$(PWD)/$(1))
  10. # Structure of repoforge tree
  11. ifndef sources_dir
  12. SOURCES_DIR_ORIG := sources
  13. else
  14. SOURCES_DIR_ORIG := $(sources_dir)
  15. endif
  16. SOURCES_DIR := $(call absname,$(SOURCES_DIR_ORIG))
  17. ifndef specs_dir
  18. SPECS_DIR_ORIG := $(SOURCES_DIR_ORIG)
  19. else
  20. SPECS_DIR_ORIG := $(specs_dir)
  21. endif
  22. SPECS_DIR := $(call absname,$(SPECS_DIR_ORIG))
  23. PATCH_NAME := $(title)-$(version)-$(REPOFORGE).patch
  24. PATCH := $(SOURCES_DIR)/$(PATCH_NAME)
  25. PATCH_LINK := $(PATCH_NAME)
  26. DATE := $(shell date +'%Y%m%d')
  27. HISTORY := "History"
  28. EXCLUDE := exclude.$(REPOFORGE)
  29. AUTO_EXCLUDE := auto_exclude.$(REPOFORGE)
  30. #------------------- Check title and version
  31. ifndef title
  32. ${error Package title is not specified.}
  33. endif
  34. #------------------- Find out base package system
  35. PKG_LEGAL := 0
  36. ifndef pkg
  37. ${error Package system is not specified.}
  38. endif
  39. ifeq "$(pkg)" "rpm"
  40. PKG_LEGAL := 1
  41. RPM := rpm
  42. RPMBUILD := $(shell \
  43. rpmbuild --help 2>/dev/null >/dev/null; \
  44. if [ $$? == "0" ]; then \
  45. echo rpmbuild; \
  46. else \
  47. echo rpm; \
  48. fi \
  49. )
  50. RPMOPTS := --define="_sourcedir $(SOURCES_DIR)" --define="_builddir $(PWD)/$(BUILD_DIR)" --define="_specdir $(SPECS_DIR)"
  51. PKG_SPEC_NAME := $(title).spec
  52. PKG_SPEC := $(SPECS_DIR)/$(PKG_SPEC_NAME)
  53. PKG_SPEC_LINK := $(title).spec
  54. PKG_WITH_PATCH := --with $(REPOFORGE)_patch
  55. PKG_WITHOUT_PATCH := --without $(REPOFORGE)_patch
  56. PKG_BP_BUILD := $(RPMBUILD) $(RPMOPTS) -bp --nodeps
  57. PKG_BC_BUILD := $(RPMBUILD) $(RPMOPTS) -bc
  58. PKG_BS := $(RPMBUILD) $(RPMOPTS) -bs
  59. PKG_BB := $(RPMBUILD) $(RPMOPTS) -bb
  60. PKG_TREE := $(RPM) $(RPMOPTS) -ivh --nodeps
  61. endif
  62. ifeq "$(pkg)" "deb"
  63. ${warning Debian package system is not supported yet.}
  64. endif
  65. ifeq ($(PKG_LEGAL),0)
  66. ${error Unsupported package system $(pkg).}
  67. endif
  68. # Public targets
  69. all: buildprep
  70. clean: temp_del build_del clean_rm
  71. init: work_dir work_link build_bp
  72. bp: temp_dir temp_link build_bp cp_build_work work_link temp_del
  73. bc: temp_dir temp_link build_bc cp_build_work work_link temp_del
  74. srpm: bs
  75. bs: temp_dir temp_link orig patch_diff build_bs work_link temp_del
  76. rpm: bb
  77. bb: temp_dir temp_link orig patch_diff build_bb work_link temp_del
  78. patch: temp_dir temp_link orig patch_diff work_link temp_del
  79. prep: rpmize work_link
  80. repair: rep
  81. rep: clean prep
  82. copy: cop
  83. cop: cp_build_work work_link temp_del
  84. # Internal targets
  85. clean_rm:
  86. @$(RM) $(PATCH) $(PATCH_LINK) $(AUTO_EXCLUDE) $(HISTORY)
  87. @if [ -h $(PKG_SPEC_LINK) ]; then \
  88. $(RM) $(PKG_SPEC_LINK); \
  89. fi
  90. init_svn:
  91. @echo "Add working dir $(WORK_DIR) to the repository..."
  92. @status=`svn -N st $(WORK_DIR)`; \
  93. if [[ "$$status" =~ "^\?" ]]; then \
  94. svn add $(WORK_DIR); \
  95. svn ci -m "Initial working dir. Created by repoforge init command." $(WORK_DIR); \
  96. # echo "OK"; \
  97. else \
  98. echo "Directory $(WORK_DIR) is already in repository."; \
  99. fi;
  100. build_bp:
  101. @echo "Build source tree...";
  102. $(PKG_BP_BUILD) $(PKG_SPEC)
  103. orig:
  104. $(PKG_BP_BUILD) $(PKG_WITHOUT_PATCH) $(PKG_SPEC)
  105. build_bc:
  106. @echo "Build package...";
  107. $(PKG_BC_BUILD) $(PKG_SPEC)
  108. cp_build_work:
  109. @echo "Copy data from temporary to working directory..."; \
  110. tar -c -C $(BUILD_DIR) `ls -A $(BUILD_DIR)` | tar -x -C $(WORK_DIR)
  111. temp_dir:
  112. @if [ ! -d $(TEMP_DIR) ]; then \
  113. mkdir $(TEMP_DIR); \
  114. else \
  115. rm -Rf $(TEMP_DIR)/*; \
  116. fi; \
  117. temp_del:
  118. @rm -Rf $(TEMP_DIR)
  119. work_dir:
  120. @echo "Creating directory $(WORK_DIR) ..."
  121. @if [ ! -d $(WORK_DIR) ]; then \
  122. mkdir $(WORK_DIR); \
  123. else \
  124. rm -Rf $(WORK_DIR)/*; \
  125. fi
  126. work:
  127. @echo "Preparing directory $(WORK_DIR) ..."
  128. $(PKG_BP_WORK) $(PKG_WITHOUT_PATCH) $(PKG_SPEC)
  129. work_del:
  130. @rm -Rf $(WORK_DIR)
  131. buildprep: patch
  132. patch_diff:
  133. @echo "Making patch..."
  134. @> $(AUTO_EXCLUDE)
  135. @svn st $(WORK_DIR) | grep -E "^\?" | sed -e "s|^\? *[^/]*/||" >> $(AUTO_EXCLUDE)
  136. @LC_ALL=en_US diff --exclude=".svn" -uNrp $(BUILD_DIR) $(WORK_DIR) | filterdiff -p 1 -X $(AUTO_EXCLUDE) -X $(EXCLUDE) | filterdiff > $(PATCH); true
  137. @if [ ! -f $(PATCH_LINK) ]; then \
  138. ln -s -f -n $(SOURCES_DIR_ORIG)/$(PATCH_NAME) $(PATCH_LINK); \
  139. fi
  140. work_link:
  141. @ln -f -n -s $(WORK_DIR) $(BUILD_DIR)
  142. temp_link:
  143. @ln -f -n -s $(TEMP_DIR) $(BUILD_DIR)
  144. build_del:
  145. @if [ -h "$(BUILD_DIR)" ]; then \
  146. $(RM) $(BUILD_DIR); \
  147. fi
  148. rpmize: spec_link
  149. spec_link:
  150. ifeq "$(pkg)" "rpm"
  151. @if [ ! -f $(PKG_SPEC_LINK) ]; then \
  152. ln -s -n -f $(SPECS_DIR_ORIG)/$(PKG_SPEC_NAME) $(PKG_SPEC_LINK); \
  153. fi
  154. endif
  155. tree:
  156. @if [ ! -f "$(SOURCES_DIR)" ]; then \
  157. mkdir -p $(SOURCES_DIR); \
  158. fi
  159. ifeq "$(pkg)" "rpm"
  160. @if [ ! -f "$(SPECS_DIR)" ]; then \
  161. mkdir -p $(SPECS_DIR); \
  162. fi
  163. endif
  164. @if [ -f "$(SOURCE)" ]; then \
  165. $(PKG_TREE) $(SOURCE); \
  166. fi
  167. build_bs:
  168. @echo "Building SRPM..."
  169. $(PKG_BS) $(PKG_SPEC)
  170. build_bb:
  171. @echo "Building RPM..."
  172. $(PKG_BB) $(PKG_SPEC)
  173. history:
  174. @> $(HISTORY)
  175. @echo "Project: "$(TITLE) >> $(HISTORY)
  176. @echo "Version: "$(version) >> $(HISTORY)
  177. @echo "Date: "`date` >> $(HISTORY)
  178. -@svn update; \
  179. if [ $$? == 0 ]; then \
  180. svn info | grep "Revision:" >> $(HISTORY); \
  181. echo "History:" >> $(HISTORY); \
  182. svn -v log >> $(HISTORY); \
  183. fi;
  184. .PHONY: all clean clean_rm install archive rpm srpm history patch build_del buildprep prep work temp work_del temp_del bp bb bs bc init temp_bp temp_cp temp_bc tree work_link temp_link build_bp orig build_bb build_bs