123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- # $Id$
- REPOFORGE := repoforge
- include package.$(REPOFORGE)
- PWD := $(shell pwd)
- WORK_DIR := work
- TEMP_DIR := temp
- BUILD_DIR := build
- # Function to find out absolute path
- absname = $(if $(filter /%,$(1)),$(1),$(PWD)/$(1))
- # Structure of repoforge tree
- ifndef sources_dir
- SOURCES_DIR_ORIG := sources
- else
- SOURCES_DIR_ORIG := $(sources_dir)
- endif
- SOURCES_DIR := $(call absname,$(SOURCES_DIR_ORIG))
- ifndef specs_dir
- SPECS_DIR_ORIG := $(SOURCES_DIR_ORIG)
- else
- SPECS_DIR_ORIG := $(specs_dir)
- endif
- SPECS_DIR := $(call absname,$(SPECS_DIR_ORIG))
- PATCH_NAME := $(title)-$(version)-$(REPOFORGE).patch
- PATCH := $(SOURCES_DIR)/$(PATCH_NAME)
- PATCH_LINK := $(PATCH_NAME)
- DATE := $(shell date +'%Y%m%d')
- HISTORY := "History"
- EXCLUDE := exclude.$(REPOFORGE)
- AUTO_EXCLUDE := auto_exclude.$(REPOFORGE)
- #------------------- Check title and version
- ifndef title
- ${error Package title is not specified.}
- endif
- #------------------- Find out base package system
- PKG_LEGAL := 0
- ifndef pkg
- ${error Package system is not specified.}
- endif
- ifeq "$(pkg)" "rpm"
- PKG_LEGAL := 1
- RPM := rpm
- RPMBUILD := $(shell \
- rpmbuild --help 2>/dev/null >/dev/null; \
- if [ $$? == "0" ]; then \
- echo rpmbuild; \
- else \
- echo rpm; \
- fi \
- )
- RPMOPTS := --define="_sourcedir $(SOURCES_DIR)" --define="_builddir $(PWD)/$(BUILD_DIR)" --define="_specdir $(SPECS_DIR)"
- PKG_SPEC_NAME := $(title).spec
- PKG_SPEC := $(SPECS_DIR)/$(PKG_SPEC_NAME)
- PKG_SPEC_LINK := $(title).spec
- PKG_WITH_PATCH := --with $(REPOFORGE)_patch
- PKG_WITHOUT_PATCH := --without $(REPOFORGE)_patch
- PKG_BP_BUILD := $(RPMBUILD) $(RPMOPTS) -bp --nodeps
- PKG_BC_BUILD := $(RPMBUILD) $(RPMOPTS) -bc
- PKG_BS := $(RPMBUILD) $(RPMOPTS) -bs
- PKG_BB := $(RPMBUILD) $(RPMOPTS) -bb
- PKG_TREE := $(RPM) $(RPMOPTS) -ivh --nodeps
- endif
- ifeq "$(pkg)" "deb"
- ${warning Debian package system is not supported yet.}
- endif
- ifeq ($(PKG_LEGAL),0)
- ${error Unsupported package system $(pkg).}
- endif
- # Public targets
- all: buildprep
- clean: temp_del build_del clean_rm
- init: work_dir work_link build_bp
- bp: temp_dir temp_link build_bp cp_build_work work_link temp_del
- bc: temp_dir temp_link build_bc cp_build_work work_link temp_del
- srpm: bs
- bs: temp_dir temp_link orig patch_diff build_bs work_link temp_del
- rpm: bb
- bb: temp_dir temp_link orig patch_diff build_bb work_link temp_del
- patch: temp_dir temp_link orig patch_diff work_link temp_del
- prep: rpmize work_link
- repair: rep
- rep: clean prep
- copy: cop
- cop: cp_build_work work_link temp_del
- # Internal targets
- clean_rm:
- @$(RM) $(PATCH) $(PATCH_LINK) $(AUTO_EXCLUDE) $(HISTORY)
- @if [ -h $(PKG_SPEC_LINK) ]; then \
- $(RM) $(PKG_SPEC_LINK); \
- fi
- init_svn:
- @echo "Add working dir $(WORK_DIR) to the repository..."
- @status=`svn -N st $(WORK_DIR)`; \
- if [[ "$$status" =~ "^\?" ]]; then \
- svn add $(WORK_DIR); \
- svn ci -m "Initial working dir. Created by repoforge init command." $(WORK_DIR); \
- # echo "OK"; \
- else \
- echo "Directory $(WORK_DIR) is already in repository."; \
- fi;
- build_bp:
- @echo "Build source tree...";
- $(PKG_BP_BUILD) $(PKG_SPEC)
- orig:
- $(PKG_BP_BUILD) $(PKG_WITHOUT_PATCH) $(PKG_SPEC)
- build_bc:
- @echo "Build package...";
- $(PKG_BC_BUILD) $(PKG_SPEC)
- cp_build_work:
- @echo "Copy data from temporary to working directory..."; \
- tar -c -C $(BUILD_DIR) `ls -A $(BUILD_DIR)` | tar -x -C $(WORK_DIR)
- temp_dir:
- @if [ ! -d $(TEMP_DIR) ]; then \
- mkdir $(TEMP_DIR); \
- else \
- rm -Rf $(TEMP_DIR)/*; \
- fi; \
- temp_del:
- @rm -Rf $(TEMP_DIR)
- work_dir:
- @echo "Creating directory $(WORK_DIR) ..."
- @if [ ! -d $(WORK_DIR) ]; then \
- mkdir $(WORK_DIR); \
- else \
- rm -Rf $(WORK_DIR)/*; \
- fi
- work:
- @echo "Preparing directory $(WORK_DIR) ..."
- $(PKG_BP_WORK) $(PKG_WITHOUT_PATCH) $(PKG_SPEC)
- work_del:
- @rm -Rf $(WORK_DIR)
- buildprep: patch
- patch_diff:
- @echo "Making patch..."
- @> $(AUTO_EXCLUDE)
- @svn st $(WORK_DIR) | grep -E "^\?" | sed -e "s|^\? *[^/]*/||" >> $(AUTO_EXCLUDE)
- @LC_ALL=en_US diff --exclude=".svn" -uNrp $(BUILD_DIR) $(WORK_DIR) | filterdiff -p 1 -X $(AUTO_EXCLUDE) -X $(EXCLUDE) | filterdiff > $(PATCH); true
- @if [ ! -f $(PATCH_LINK) ]; then \
- ln -s -f -n $(SOURCES_DIR_ORIG)/$(PATCH_NAME) $(PATCH_LINK); \
- fi
- work_link:
- @ln -f -n -s $(WORK_DIR) $(BUILD_DIR)
- temp_link:
- @ln -f -n -s $(TEMP_DIR) $(BUILD_DIR)
- build_del:
- @if [ -h "$(BUILD_DIR)" ]; then \
- $(RM) $(BUILD_DIR); \
- fi
- rpmize: spec_link
- spec_link:
- ifeq "$(pkg)" "rpm"
- @if [ ! -f $(PKG_SPEC_LINK) ]; then \
- ln -s -n -f $(SPECS_DIR_ORIG)/$(PKG_SPEC_NAME) $(PKG_SPEC_LINK); \
- fi
- endif
- tree:
- @if [ ! -f "$(SOURCES_DIR)" ]; then \
- mkdir -p $(SOURCES_DIR); \
- fi
- ifeq "$(pkg)" "rpm"
- @if [ ! -f "$(SPECS_DIR)" ]; then \
- mkdir -p $(SPECS_DIR); \
- fi
- endif
- @if [ -f "$(SOURCE)" ]; then \
- $(PKG_TREE) $(SOURCE); \
- fi
- build_bs:
- @echo "Building SRPM..."
- $(PKG_BS) $(PKG_SPEC)
- build_bb:
- @echo "Building RPM..."
- $(PKG_BB) $(PKG_SPEC)
- history:
- @> $(HISTORY)
- @echo "Project: "$(TITLE) >> $(HISTORY)
- @echo "Version: "$(version) >> $(HISTORY)
- @echo "Date: "`date` >> $(HISTORY)
- -@svn update; \
- if [ $$? == 0 ]; then \
- svn info | grep "Revision:" >> $(HISTORY); \
- echo "History:" >> $(HISTORY); \
- svn -v log >> $(HISTORY); \
- fi;
- .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
|