|
@@ -0,0 +1,230 @@
|
|
|
+# $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
|
|
|
+
|