qpsmtpd/packaging/rpm/Makefile
2010-04-07 22:16:11 -07:00

183 lines
4.5 KiB
Makefile

# -- 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 "srpmdist" target will build an SRPM out of the SCM, but
# will use the user's default build settings (which in many
# cases is exposed as an RPM repository)
#
srpmdist: buildsrpmdist
buildsrpmdist: buildtargz
@rpmbuild \
--define "_package ${PACKAGE}" \
--define "_version ${VERSION}" \
--define "_release ${RELEASE}" \
-ts --nodeps ./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
# -- the "srpm" target will build an SRPM out of the SCM, but
# will leave the resulting package in the relative ./build/
# directory
#
srpm: buildsrpm $(SCM_TYPE)-clean
buildsrpm: buildtargz
@echo ${PACKAGE} ${VERSION} ${RELEASE}
@rpmbuild \
--define "_rpmdir ./build/" \
--define "_sourcedir ./build/" \
--define "_srcrpmdir ./build/" \
--define "_package ${PACKAGE}" \
--define "_version ${VERSION}" \
--define "_release ${RELEASE}" \
-ts --nodeps ./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