summaryrefslogtreecommitdiff
path: root/fedora/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'fedora/Makefile')
-rw-r--r--fedora/Makefile193
1 files changed, 193 insertions, 0 deletions
diff --git a/fedora/Makefile b/fedora/Makefile
new file mode 100644
index 0000000000..73a6fd2287
--- /dev/null
+++ b/fedora/Makefile
@@ -0,0 +1,193 @@
+# Makefile for maintaining glibc fedora-branch and creating Fedora source RPMs.
+
+glibc.spec: # The default target.
+
+tag-prefix := fedora-
+
+.PHONY: update commit-merge tag archive finish_archive srpm rpm
+
+snapshot-date-fmt := +'%Y-%m-%d %H:%M %Z'
+snapshot-name-fmt := +'%Y%m%dT%H%M'
+
+include branch.mk
+
+
+on-branch = $(filter-out HEAD,$(glibc-base))
+
+snapshot-date := $($(glibc-branch)-sync-date)
+snapshot-name := $(shell date -u -d '$(snapshot-date)' $(snapshot-name-fmt))
+
+tag-name := glibc$(patsubst glibc-%-branch,-%,\
+ $(filter-out HEAD,$(glibc-base)))
+tar-name := $(subst _,.,$(tag-name))
+select-snapshot = -r '$($(glibc-branch)-sync-tag)'
+snapshot-id = $($(glibc-branch)-sync-tag)
+
+branch-name := $(patsubst %-$(patsubst glibc-%,%,$(tag-name)),%,\
+ $(glibc-branch))
+
+branch.mk-vars = glibc-branch glibc-base DIST_BRANCH COLLECTION \
+ releases-url
+
+ifeq (,$(upstream-tag))
+ifneq (,$(upstream))
+upstream-tag := glibc-$(subst .,_,$(upstream))
+endif
+endif
+
+update:
+ now=`date -u $(snapshot-date-fmt)`; \
+ $(if $(upstream-tag),new='$(upstream-tag)';,\
+ name=`date -u -d "$$now" $(snapshot-name-fmt)`; \
+ new="$(tag-prefix)$(tag-name)-$$name"; \
+ cvs -Q rtag $(if $(on-branch),-r $(glibc-base),-D "$$now") $$new libc;\
+ )\
+ (echo '# This file is updated automatically by Makefile.'; \
+ $(foreach var,$(branch.mk-vars) $(if $(upstream-tag),upstream),\
+ $(if $($(var)),echo '$(var) := $($(var))';)) \
+ echo "$(glibc-branch)-sync-date := $$now"; \
+ echo "$(glibc-branch)-sync-tag := $$new"; \
+ ) > branch.mk; \
+ cd ..; (set -x; cvs -q update -d -P \
+ -j'$($(glibc-branch)-sync-tag)' -j"$$new") \
+ 2>&1 | tee fedora/update.log
+
+.PHONY: snapshot-time
+snapshot-time: branch.mk
+ date -d '$(snapshot-date)'
+
+commit-merge:
+ cd ..; cvs -Q commit -m"Updated to $(snapshot-id)"
+
+glibc.spec: glibc.spec.in ../version.h branch.mk
+ (echo '%define glibcdate $(snapshot-name)'; \
+ echo '%define glibcname $(tar-name)'; \
+ echo '%define glibcsrcdir $(srcdir-name)'; \
+ echo '%define glibc_release_tarballs $(if $(upstream),1,0)'; \
+ sed -n '/VERSION/s/^.*"\([^"]*\)"$$/%define glibcversion \1/p' \
+ ../version.h; \
+ cat $<) > $@.new
+ mv -f $@.new $@
+
+ifeq (,$(wildcard glibc.spec))
+Makefile: glibc.spec ;
+else
+
+spec-nvr := $(shell rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}\n' \
+ --specfile glibc.spec | sed 1q)
+spec-tag = $(subst .,_,$(spec-nvr))
+
+ifeq ($(tagged),no)
+select-release = -r $(glibc-branch)-branch
+else
+select-release = -r $(tag-prefix)$(spec-tag)
+endif
+
+tag: glibc.spec
+ cd ..; cvs -Q tag -c $(tag-prefix)$(spec-tag)
+
+force-tag: glibc.spec
+ cd ..; cvs -Q tag -F -c $(tag-prefix)$(spec-tag)
+
+ifeq (,$(upstream))
+srcdir-name = $(tar-name)-$(snapshot-name)
+else
+tar-name = glibc-$(upstream)
+srcdir-name = $(tar-name)
+
+ifneq ($($(glibc-branch)-sync-tag),$(upstream-tag))
+define upstream-tag-check
+ @echo Need to run make update upstream=$(upstream); exit 1
+endef
+endif
+endif
+
+# Note this rule assumes that your working directory (..) is up to date.
+$(tar-name)-$(branch-name).patch: makepatch.awk glibc.spec \
+ ../ChangeLog ../*/ChangeLog
+ $(upstream-tag-check)
+# Use -kk to suppress patches for $ Id $ differences between branches.
+ (cd ..; cvs -q diff -kk -upN $(select-snapshot) $(select-release)) | \
+ awk -v OLDVER=$(srcdir-name) \
+ -v NEWVER=$(srcdir-name)-$(branch-name) \
+ -f $< > patch.tmp
+ mv -f patch.tmp $@
+
+# makepatch.awk omits these files from the patch; we put them in a tar file.
+outside-patch = fedora c_stubs rtkaio powerpc-cpu \
+ localedata/charmaps/GB18030 iconvdata/gb18030.c
+
+$(tar-name)-$(branch-name)-$(snapshot-name).tar.bz2: Makefile branch.mk \
+ ../ChangeLog \
+ ../*/ChangeLog
+ $(upstream-tag-check)
+ @rm -rf libc
+ cvs -Q export $(select-release) $(addprefix libc/,$(outside-patch))
+ tar cf - -C libc $(outside-patch) | bzip2 -9 > $@.new
+ rm -rf libc
+ mv -f $@.new $@
+
+glibc-tarballs = $(srcdir-name).tar.bz2
+ifeq (,$(upstream))
+$(srcdir-name).tar.bz2: Makefile branch.mk
+ @rm -rf $(srcdir-name)
+ cvs -Q export -d $(srcdir-name) $(select-snapshot) libc
+ tar cf - $(srcdir-name) | bzip2 -9 > $@.new
+ rm -rf $(srcdir-name)
+ mv -f $@.new $@
+else
+glibc-tarballs += $(srcdir-name:glibc-%=glibc-linuxthreads-%).tar.bz2 \
+ $(srcdir-name:glibc-%=glibc-libidn-%).tar.bz2
+
+$(glibc-tarballs):
+ curl -O $(releases-url)/$@
+endif
+
+archives = $(glibc-tarballs) \
+ $(tar-name)-$(branch-name)-$(snapshot-name).tar.bz2 \
+ $(tar-name)-$(branch-name).patch
+
+finish_archive: $(archives)
+
+archive: glibc.spec
+ $(MAKE) tag finish_archive
+
+rpm srpm: $(spec-nvr).src.rpm
+$(spec-nvr).src.rpm: glibc.spec $(archives)
+ rpmbuild --define "_sourcedir `pwd`" \
+ --define "_specdir `pwd`" \
+ --define "_srcrpmdir `pwd`" \
+ --nodeps -bs $<
+
+###
+# These rules are for dealing with the Fedora package repository
+# and the Red Hat internal build system.
+#
+# To use this, put in ~/.cvsdistrc at least a line:
+# DIST_COMMON = /some/checkout/of/dist/common
+# We will find cvs-import.sh there and use its CVS/Root for where to commit.
+
+.PHONY: dist-import
+
+-include ~/.cvsdistrc
+
+ifdef DIST_COMMON
+DIST_BRANCH ?= devel
+COLLECTION ?= dist-fc4
+BHC_FLAGS ?= -n
+
+bhc-baseurl := cvs://cvs.devel.redhat.com/cvs/dist?rpms
+bhc-url = $(bhc-baseurl)/glibc/$(DIST_BRANCH)\#$(spec-tag)
+
+dist-import: $(spec-nvr).src.rpm
+ $(DIST_COMMON)/cvs-import.sh -b $(DIST_BRANCH) $<
+ rpm -qp $< --queryformat '[%{FILEMD5S} %{FILENAMES}\n]' > $@.new
+ mv -f $@.new $@
+
+dist-build: dist-import
+ bhc $(BHC_FLAGS) $(COLLECTION) '$(bhc-url)'
+
+endif
+###
+
+endif