# $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