From fba594d0cb531a9ecf9568081afbe0b4c3cacb82 Mon Sep 17 00:00:00 2001 From: Robin Bowes Date: Fri, 31 Jul 2009 00:02:33 +0100 Subject: [PATCH] Add RPM packaging Makefile previously missed due to .gitignore --- packaging/rpm/Makefile | 152 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 packaging/rpm/Makefile diff --git a/packaging/rpm/Makefile b/packaging/rpm/Makefile new file mode 100644 index 0000000..baa75a1 --- /dev/null +++ b/packaging/rpm/Makefile @@ -0,0 +1,152 @@ +# -- generic Makefile for building RPM-based packages out of source +# code control systems (git, cvs, svn) + +SCM_TYPE := git +SCM_PATH := ../../ +#CVSROOT := $(shell cat 2>/dev/null src/CVS/Root) +#SVN_PATH := $(shell svn info ${SCM_PATH} 2>/dev/null | awk '/^URL:/{print $$2}') +#SVN_REV := $(shell svn info ${SVN_PATH} 2>/dev/null | awk '/^Last Changed Rev:/{print $$4}') + +PACKAGE := $(shell cat PACKAGE) +VERSION := $(shell cat VERSION) +RELEASE := $(shell cat RELEASE) +BASE_VER := ${VERSION}-${RELEASE} +CURRENT_PACKAGE := $(PACKAGE)-$(BASE_VER) +TARBALL := $(CURRENT_PACKAGE).tar + +DIRNAME := $(shell echo $${PWD}) +DIRBASE := $(shell basename $${PWD}) + + +.SUFFIXES: +.PHONY: clean mrclean distclean prepclean all default +.PHONY: rpm rpmdist buildrpm buildrpmdist +.PHONY: buildtarball buildtargz +.PHONY: builddir distdir prepbuildtarball +.PHONY: cvs-export git-export svn-export test-export +.PHONY: cvs-clean git-clean svn-clean test-clean +.PHONY: update + +default: rpmdist + +# -- the "rpmdist" target will build out of the SCM, but will +# use the user's default build settings (which in many cases +# is exposed as an RPM repository) +# +#rpmdist: buildrpmdist distclean +rpmdist: buildrpmdist + +buildrpmdist: buildtargz + @rpmbuild \ + --define "_package ${PACKAGE}" \ + --define "_version ${VERSION}" \ + --define "_release ${RELEASE}" \ + -ta ./build/$(TARBALL).gz + +# -- the "rpm" target will build out of the SCM, but will leave +# the resulting package in the relative ./build/ directory +# +rpm: buildrpm $(SCM_TYPE)-clean + +buildrpm: buildtargz + @echo ${PACKAGE} ${VERSION} ${RELEASE} + @rpmbuild \ + --define "_rpmdir ./build/" \ + --define "_sourcedir ./build/" \ + --define "_srcrpmdir ./build/" \ + --define "_package ${PACKAGE}" \ + --define "_version ${VERSION}" \ + --define "_release ${RELEASE}" \ + -ta ./build/$(TARBALL).gz + +buildtarball: prepbuildtarball + @tar \ + --create \ + --directory ./build/ \ + --file ./build/$(TARBALL) \ + ${CURRENT_PACKAGE} + +buildtargz: buildtarball + @gzip -c < ./build/$(TARBALL) > ./build/$(TARBALL).gz + +prepbuildtarball: $(SCM_TYPE)-export + ${MAKE} update \ + && cp ${PACKAGE}.spec ./build/${CURRENT_PACKAGE} \ + && cp files/* ./build/ + +test-clean: + @cd .. \ + && rm "$(CURRENT_PACKAGE)" + +test-export: builddir + @cd .. \ + && ln -snvf $(DIRBASE) $(CURRENT_PACKAGE) \ + && tar \ + --create \ + --dereference \ + --to-stdout \ + --exclude "*.git*" \ + --exclude "*.svn*" \ + --exclude "*/CVS/*" \ + --exclude "$(CURRENT_PACKAGE)/build/*" \ + $(CURRENT_PACKAGE) \ + | tar \ + --extract \ + --directory $(CURRENT_PACKAGE)/build/ \ + --file - + +git-export: builddir prepclean + (cd $(SCM_PATH) ; git-archive --format=tar --prefix=$(CURRENT_PACKAGE)/ HEAD) \ + | tar \ + --extract \ + --directory ./build/ \ + --file - + +git-clean: + @: + +cvs-export: builddir prepclean + @cd ./build/ \ + && echo CURRENT_PACKAGE: ${CURRENT_PACKAGE} \ + && echo CVSROOT: ${CVSROOT} \ + && CVSROOT=${CVSROOT} cvs export -r HEAD -d$(CURRENT_PACKAGE) ${PACKAGE} + +cvs-clean: + @: + +svn-export: builddir prepclean + @cd ./build/ \ + && svn export $(SVN_PATH) $(CURRENT_PACKAGE) + +svn-clean: + @: + +builddir: + @mkdir -p ./build + +distdir: + @mkdir -p ./dist + +prepclean: + @rm -rf ./build/$(CURRENT_PACKAGE)* + +clean: + @rm -rf ./build/* ./dist/* 2>/dev/null || : + +mrclean: clean + +distclean: clean $(SCM_TYPE)-clean + @rmdir ./build/ ./dist/ 2>/dev/null || : + +# -- recursive Makefile calls (during build phase) +# +update: $(PACKAGE).spec VERSION RELEASE + +$(PACKAGE).spec: VERSION RELEASE $(PACKAGE).spec.in + @sed \ + -e "s|@PACKAGE@|$(PACKAGE)|" \ + -e "s|@VERSION@|$(VERSION)|" \ + -e "s|@RELEASE@|$(RELEASE)|" \ + < $(PACKAGE).spec.in > $@ + +# -- end of Makefile