From c5cf354fa5a4e3b80a7ae31efc52b6a13abc7fdc Mon Sep 17 00:00:00 2001
From: Mark Grondona <mgrondona@llnl.gov>
Date: Wed, 22 Jan 2003 21:30:36 +0000
Subject: [PATCH]  o check in Chris' make rpm target

---
 Make-rpm.mk | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 122 insertions(+)
 create mode 100644 Make-rpm.mk

diff --git a/Make-rpm.mk b/Make-rpm.mk
new file mode 100644
index 00000000000..0e338a8e42b
--- /dev/null
+++ b/Make-rpm.mk
@@ -0,0 +1,122 @@
+##
+# Makefile Include for RPM Construction
+#   by Chris Dunlap <cdunlap@llnl.gov>
+##
+# $Id$
+##
+# REQUIREMENTS:
+# - requires project to be under CVS version control
+# - requires "PROJECT" macro definition set to the CVS project name
+# - requires "META" file to reside in the top-level directory of the project
+# - requires RPM spec file named "$(PROJECT).spec.in" or "$(PROJECT).spec"
+#     to reside in the top-level directory of the project
+##
+# META FILE FORMAT:
+# - whitespace is ignored
+# - comments are ignored (ie, lines beginning with the pound character)
+# - lines are of the form "TAG:VALUE"
+# - TAGs and VALUEs cannot contain whitespace
+# - supported tags: NAME, VERSION, RELEASE
+# - NAME tag must be set the same as the PROJECT macro definition
+##
+# CVS TAG FORMAT:
+# - if RELEASE is not defined, tags are of the form "NAME-VERSION";
+#     o/w, they are of the form "NAME-VERSION-RELEASE"
+# - periods are converted to hyphens
+# - examples: foo v1.2.3 (foo-1-2-3), foo v1.2.3 r4 (foo-1-2-3-4)
+##
+# NOTES:
+# - RPM will be built directly from the CVS repository based on the CVS tag
+# - CVS tag will be based on the contents of the META file by default;
+#     this allows the version information to be stored and tagged within CVS
+# - CVS tag can be specified on the make cmdline to override the default
+#     (eg, make rpm tag=foo-1-2-3)
+# - CVS "HEAD" tag can be used to build the most recent version in CVS
+#     w/o requiring it to be tagged within CVS (eg, make rpm tag=HEAD);
+#     this is intended for pre-release testing purposes only
+# - CVS "HEAD" releases will have a "+" appended to the version to denote
+#     an augmented release; the contents of such a release can be resurrected
+#     from CVS by using a CVS date spec "-D" based on the RPM's "Build Date"
+#     (eg, rpm -qp --queryformat="%{BUILDTIME:date}\n" foo-1.2.3-1.i386.rpm)
+# - RPM will be signed with a PGP/GPG key if one is specified in ~/.rpmmacros
+##
+# USAGE:
+# - update and cvs commit the META file (cf, META FILE FORMAT)
+# - cvs tag/rtag the project (cf, CVS TAG FORMAT)
+# - make rpm
+##
+
+tar rpm:
+	@proj=$(PROJECT); if test -z "$$proj"; then \
+	  echo "ERROR: PROJECT macro def is not defined." 1>&2; exit 1; fi; \
+	if test -z "$$tag"; then \
+	  if ! test -f META; then \
+	    echo "ERROR: Cannot find $$proj metadata in \"`pwd`/META\"." 1>&2; \
+	      exit 1; fi; \
+	  name=`perl -ne 'print,exit if s/^\s*NAME:\s*(\S*).*/\1/i' META`; \
+	  ver=`perl -ne 'print,exit if s/^\s*VERSION:\s*(\S*).*/\1/i' META`; \
+	  rel=`perl -ne 'print,exit if s/^\s*RELEASE:\s*(\S*).*/\1/i' META`; \
+	  test -z "$$rel" && pkg=$$name-$$ver || pkg=$$name-$$ver-$$rel; \
+	  tag=`echo $$pkg | sed 's/\./-/g'`; fi; \
+	tmp=$${TMPDIR-/tmp}/tmp-$$proj-$$$$; \
+	rm -rf $$tmp || exit 1; \
+	test -n "$(mkinstalldirs)" \
+	  && mkdir="$(mkinstalldirs)" || mkdir="mkdir -p"; \
+	if ! $$mkdir $$tmp >/dev/null; then \
+	  echo "ERROR: Cannot create \"$$tmp\" dir." 1>&2; exit 1; fi; \
+	test -f CVS/Root && cvs="cvs -d `cat CVS/Root`" || cvs="cvs"; \
+	echo "Fetching $$proj from CVS (tag=$$tag) ..."; \
+	(cd $$tmp; $$cvs -Q export -r $$tag $$proj) || exit 1; \
+	meta=$$tmp/$$proj/META; \
+	if test ! -f "$$meta"; then \
+	  echo "ERROR: Cannot find $$proj metadata in CVS." 1>&2; exit 1; fi; \
+	name=`perl -ne 'print,exit if s/^\s*NAME:\s*(\S*).*/\1/i' $$meta`; \
+	if test "$$proj" != "$$name"; then \
+	  echo "ERROR: PROJECT does not match metadata." 1>&2; exit 1; fi; \
+	ver=`perl -ne 'print,exit if s/^\s*VERSION:\s*(\S*).*/\1/i' $$meta`; \
+	rver="$$ver"; \
+	test "$$tag" = "HEAD" -o "$$tag" = "BASE" && ver="$$ver+"; \
+	rel=`perl -ne 'print,exit if s/^\s*RELEASE:\s*(\S*).*/\1/i' $$meta`; \
+	if test -z "$$rel"; then \
+	  pkg=$$name-$$ver; rel=1; else pkg=$$name-$$ver-$$rel; fi; \
+        if test -x "$$tmp/$$proj/autogen.sh"; then \
+	  mv "$$tmp/$$proj" "$$tmp/$$proj.bak" || exit 1; \
+	  (cd "$$tmp/$$proj.bak"; ./autogen.sh; ./configure; \
+	   $(MAKE) -s distdir) || exit 1; \
+	  mv "$$tmp/$$proj.bak/$$name-$$rver" "$$tmp/$$pkg" || exit 1; \
+	  rm -rf "$$tmp/$$proj.bak"; \
+	  else mv "$$tmp/$$proj" "$$tmp/$$pkg" || exit 1; fi; \
+	$(MAKE) -s $@-internal mkdir="$$mkdir" tmp="$$tmp" \
+	  proj="$$proj" pkg="$$pkg" ver="$$ver" rel="$$rel" \
+	    && rm -rf $$tmp
+
+tar-internal:
+	@echo "Creating $$pkg.tgz ..."; \
+	rm -f $$pkg.tgz || exit 1; \
+	(cd $$tmp; tar -cf - $$pkg) | gzip -c9 >$$tmp/$$pkg.tgz; \
+	cp -p $$tmp/$$pkg.tgz $$pkg.tgz || exit 1
+
+rpm-internal: tar-internal
+	@echo "Creating $$pkg*rpm ..."; \
+	for d in BUILD RPMS SOURCES SPECS SRPMS TMP; do \
+	  if ! $$mkdir $$tmp/$$d >/dev/null; then \
+	    echo "ERROR: Cannot create \"$$tmp/$$d\" dir." 1>&2; exit 1; fi; \
+	      done; \
+	mv $$tmp/$$pkg.tgz $$tmp/SOURCES/ || exit 1; \
+	test -f $$tmp/$$pkg/$$proj.spec.in \
+	  && spec=$$tmp/$$pkg/$$proj.spec.in \
+	  || spec=$$tmp/$$pkg/$$proj.spec; \
+	if ! test -f $$spec; then \
+	  echo "ERROR: Cannot find $$proj spec file in CVS." 1>&2; exit 1; fi; \
+	sed -e "s/^\([ 	]*Name:\).*/\1 $$proj/i" \
+	    -e "s/^\([ 	]*Version:\).*/\1 $$ver/i" \
+	    -e "s/^\([ 	]*Release:\).*/\1 $$rel/i" \
+	    -e "s/^\([ 	]*Source0?:\).*/\1 $$pkg.tgz/i" \
+	    <$$spec >$$tmp/SPECS/$$proj.spec; \
+	if ! test -s $$tmp/SPECS/$$proj.spec; then \
+	  echo "ERROR: Cannot create $$proj.spec." 1>&2; exit 1; fi; \
+	rpm --showrc | egrep "_(gpg|pgp)_nam" >/dev/null && sign="--sign"; \
+	if ! rpm -ba --define "_tmppath $$tmp/TMP" --define "_topdir $$tmp" \
+	  $$sign --quiet $$tmp/SPECS/$$proj.spec >$$tmp/rpm.log 2>&1; then \
+	    cat $$tmp/rpm.log; exit 1; fi; \
+	cp -p $$tmp/RPMS/*/$$proj-*.rpm $$tmp/SRPMS/$$proj-*.src.rpm . || exit 1
-- 
GitLab