183 lines
4.5 KiB
Makefile
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
|