autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Makefile.maint (Was: TODO)


From: Akim Demaille
Subject: Makefile.maint (Was: TODO)
Date: 07 Jun 2001 17:25:26 +0200
User-agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Copyleft)

>>>>> "Akim" == Akim Demaille <address@hidden> writes:

Akim> - Integrating the Fetish GNUMakefile/Makefile.maint machinery

I've gave the first stab to it.  There are still a few references to
its origins, but I'm confident we can have something common between
Fetish and Autoconf, putting all the specific data outside these
generic files.

Some chunks are already adjusted so that they are still triggered for
Fetish, and not for Autoconf (e.g., the core of po-check).

Dear fellow maintainers, don't hesitate putting new automated tasks in
there!

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * Makefile.maint, GNUmakefile, .prev-version: New, based on the
        Fileutils 4.1.

Index: .prev-version
===================================================================
RCS file: .prev-version
diff -N .prev-version
--- /dev/null   Sat Apr 14 17:46:23 2001
+++ .prev-version Thu Jun 7 08:17:07 2001
@@ -0,0 +1 @@
+2.50
Index: GNUmakefile
===================================================================
RCS file: GNUmakefile
diff -N GNUmakefile
--- /dev/null   Sat Apr 14 17:46:23 2001
+++ GNUmakefile Thu Jun 7 08:17:07 2001
@@ -0,0 +1,32 @@
+# Having a separate GNUmakefile lets me `include' the dynamically
+# generated rules created via Makefile.maint as well as Makefile.maint itself.
+# This makefile is used only if you run GNU Make.
+# It is necessary if you want to build targets usually of interest
+# only to the maintainer.
+
+# Systems where /bin/sh is not the default shell need this.  The $(shell)
+# command below won't work with e.g. stock DOS/Windows shells.
+SHELL = /bin/sh
+
+have-Makefile := $(shell test -f Makefile && echo yes)
+
+# If the user runs GNU make but has not yet run ./configure,
+# give them a diagnostic.
+ifeq ($(have-Makefile),yes)
+
+include Makefile
+include $(srcdir)/Makefile.maint
+
+else
+
+all:
+       @echo There seems to be no Makefile in this directory.
+       @echo "You must run ./configure before running \`make'."
+       @exit 1
+
+endif
+
+# Tell version 3.79 and up of GNU make to not build goals in this
+# directory in parallel.  This is necessary in case someone tries to
+# build multiple targets on one command line.
+.NOTPARALLEL:
Index: Makefile.am
===================================================================
RCS file: /cvs/autoconf/Makefile.am,v
retrieving revision 1.52
diff -u -u -r1.52 Makefile.am
--- Makefile.am 2001/06/06 08:49:33 1.52
+++ Makefile.am 2001/06/07 15:17:07
@@ -52,7 +52,8 @@
              acversion.in \
              autoconf.in autoheader.in autoreconf.in autoupdate.in ifnames.in \
              autoscan.in \
-             $(distpkgdataDATA)
+             $(distpkgdataDATA) \
+             GNUmakefile Makefile.maint .prev-version
 
 # Files that should be removed, but which Automake does not know:
 # the frozen files and the scripts.
@@ -90,8 +91,8 @@
 
 
 ## maintainer-check ##
-
-maintainer-check:
+maintainer-check: maintainer-check-tests
+maintainer-check-tests:
        cd tests && make maintainer-check
 
 ## ----------------------------------- ##
@@ -213,3 +214,17 @@
        $(WGET) ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex    -O 
$(srcdir)/doc/texinfo.tex
        $(WGET) ftp://ftp.gnu.org/gnu/config/config.guess    -O 
$(srcdir)/config/config.guess
        $(WGET) ftp://ftp.gnu.org/gnu/config/config.sub      -O 
$(srcdir)/config/config.sub
+
+
+
+## ---------------------------- ##
+## Customizing Makefile.maint.  ##
+## ---------------------------- ##
+
+hosts = a b
+a_host = alpha.gnu.org
+b_host = freefriends.org
+
+alpha_subdir = gnu/fetish
+a_url_dir = $(alpha_subdir)
+b_url_dir = $(alpha_subdir)
Index: Makefile.in
===================================================================
RCS file: /cvs/autoconf/Makefile.in,v
retrieving revision 1.134
diff -u -u -r1.134 Makefile.in
--- Makefile.in 2001/06/06 08:49:33 1.134
+++ Makefile.in 2001/06/07 15:17:08
@@ -93,7 +93,7 @@
 
 pkgdata_DATA = $(distpkgdataDATA) $(nodistpkgdataDATA)
 
-EXTRA_DIST = ChangeLog.0 ChangeLog.1 ChangeLog.2              BUGS INSTALL.txt 
             acversion.in              autoconf.in autoheader.in autoreconf.in 
autoupdate.in ifnames.in              autoscan.in              
$(distpkgdataDATA)
+EXTRA_DIST = ChangeLog.0 ChangeLog.1 ChangeLog.2              BUGS INSTALL.txt 
             acversion.in              autoconf.in autoheader.in autoreconf.in 
autoupdate.in ifnames.in              autoscan.in              
$(distpkgdataDATA)              GNUmakefile Makefile.maint .prev-version
 
 
 # Files that should be removed, but which Automake does not know:
@@ -105,6 +105,14 @@
 
 edit = sed     -e 's,@SHELL\@,$(SHELL),g'      -e 's,@PERL\@,$(PERL),g'        
-e 's,@datadir\@,$(pkgdatadir),g'       -e 's,@bindir\@,$(bindir),g'    -e 
's,@autoconf-name\@,'`echo autoconf | sed '$(transform)'`',g'        -e 
's,@autoheader-name\@,'`echo autoheader | sed '$(transform)'`',g'    -e 
's,@M4\@,$(M4),g'    -e 's,@AWK\@,$(AWK),g'  -e 's,@VERSION\@,$(VERSION),g'  -e 
's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g'
 
+
+hosts = a b
+a_host = alpha.gnu.org
+b_host = freefriends.org
+
+alpha_subdir = gnu/fetish
+a_url_dir = $(alpha_subdir)
+b_url_dir = $(alpha_subdir)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_CLEAN_FILES = 
@@ -426,7 +434,8 @@
        $(MAKEINFO) $< --no-headers --no-validate --no-split --output=$@
        if test '$(srcdir)' != '.'; then cp $@ $(srcdir); rm -f $@; fi
 
-maintainer-check:
+maintainer-check: maintainer-check-tests
+maintainer-check-tests:
        cd tests && make maintainer-check
 
 install-data-hook: INSTALL.txt
Index: Makefile.maint
===================================================================
RCS file: Makefile.maint
diff -N Makefile.maint
--- /dev/null   Sat Apr 14 17:46:23 2001
+++ Makefile.maint Thu Jun 7 08:17:08 2001
@@ -0,0 +1,184 @@
+# -*-Makefile-*-
+# This Makefile fragment is shared between fileutils, sh-utils, textutils.
+
+maintainer-check:
+       if head ChangeLog| grep 'Version $(VERSION)' > /dev/null; then \
+         :; \
+       else \
+         echo "$(VERSION) not in ChangeLog; not tagging" 1>&2; \
+         exit 1; \
+       fi
+       $(MAKE) distcheck
+       $(MAKE) my-distcheck
+
+prev_version_file = .prev-version
+
+THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
+PREV_VERSION := $(shell cat $(prev_version_file))
+PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
+
+tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+tag-this-version = $(subst .,_,$(VERSION))
+tag-prev-version = $(subst .,_,$(PREV_VERSION))
+this-cvs-tag = $(tag-package)-$(tag-this-version)
+prev-cvs-tag = $(tag-package)-$(tag-prev-version)
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Verify that all source files using _() are listed in po/POTFILES.in.
+po-check:
+       if test -f po/POTFILES.in; then \
+         grep -E -v '^(#|$$)' po/POTFILES.in | sort > address@hidden; \
+         grep -E -l '\b_\(' lib/*.c src/*.c | sort > address@hidden; \
+         diff -u address@hidden address@hidden || exit 1; \
+         rm -f address@hidden address@hidden; \
+       fi
+
+# Do not save the original name or timestamp in the .tar.gz file.
+GZIP_ENV = --no-name
+
+# Tag before making distribution.  Also, don't make a distribution if
+# checks fail.  Also, make sure the NEWS file is up-to-date.
+# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
+cvs-dist: maintainer-check
+       echo $(this-cvs-tag); \
+       if cvs -n log -h README| grep -e $(this-cvs-tag): > /dev/null; then \
+         echo "VERSION not new; not tagging" 1>&2; \
+         exit 1; \
+       fi; \
+       cvs update po; \
+       cvs tag -c $(this-cvs-tag)
+       $(MAKE) dist
+
+# Use this to make sure we don't run these programs when building
+# from a virgin tgz file, below.
+null_AM_MAKEFLAGS = \
+  ACLOCAL=false \
+  AUTOCONF=false \
+  AUTOMAKE=false \
+  AUTOHEADER=false \
+  MAKEINFO=false
+
+# Detect format-string/arg-list mismatches that would normally be obscured
+# by the use of _().  The --disable-nls effectively defines away that macro,
+# and building with CFLAGS='-Wformat -Werror' causes any format warning to be
+# treated as a failure.
+t=./=test
+my-distcheck: writable-files po-check
+       -rm -rf $(t)
+       mkdir $(t)
+       GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
+# Removing $(DEPDIR) like this is a gross kludge to work around a bug
+# in automake.  Remove that line once it's fixed.
+       cd $(t)/$(distdir) \
+         && ./configure --disable-nls \
+         && $(MAKE) CFLAGS='-Wformat -Werror' \
+             AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
+         && $(MAKE) dvi \
+         && $(MAKE) check \
+         && $(MAKE) distclean \
+         && rm -rf $(DEPDIR)
+       cd $(t) && mv $(distdir) $(distdir).old \
+         && $(AMTAR) -zxf ../$(distdir).tar.gz
+       diff -ur $(t)/$(distdir).old $(t)/$(distdir)
+       -rm -rf $(t)
+       @echo "========================"; \
+       echo "$(distdir).tar.gz is ready for distribution"; \
+       echo "========================"
+
+# This must be the same name on both hosts.
+# Make it a symlink that points to the right place.
+real_dir = fetish-ftp
+
+url_dir_list = $(foreach x,$(hosts),ftp://$($(x)_host)/$($(x)_url_dir))
+
+md5 = $(shell md5sum < $(my_distdir).tar.gz|sed 's/  -//')
+sha1 = $(shell sha1sum < $(my_distdir).tar.gz|sed 's/  -//')
+
+rel-check:
+       tarz=/tmp/rel-check-tarz-$$$$; \
+       md5_tmp=/tmp/rel-check-md5-$$$$; \
+       set -e; \
+       trap 'status=$$?; rm -f $$tarz $$md5_tmp; exit $$status' 0 1 2 3 15; \
+       wget -q --output-document=$$tarz $(url); \
+       echo "$(md5)  -" > $$md5_tmp; \
+       md5sum -c $$md5_tmp < $$tarz
+
+release-archive-dir = ../release
+prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
+xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
+
+announcement: NEWS ChangeLog $(distdir).tar.gz
+       @( \
+         echo Subject: $(my_distdir) released; \
+         echo; \
+         echo FIXME: put comments here; \
+         echo; \
+         for url in $(url_dir_list); do \
+           echo "  $$url/$(my_distdir).tar.gz"; \
+         done; \
+         echo; \
+         echo And here are xdelta-style diffs; \
+         echo; \
+         for url in $(url_dir_list); do \
+           echo "  $$url/$(xd-delta)"; \
+         done; \
+         echo; \
+         echo "Here are the MD5 and SHA1 signatures for the .tar.gz file"; \
+         echo; \
+         echo "$(md5)  $(my_distdir).tar.gz"; \
+         echo "$(sha1)  $(my_distdir).tar.gz"; \
+         echo; \
+         echo NEWS:; \
+         sed -n "/$(THIS_VERSION_REGEXP)/,/^\[$(PREV_VERSION_REGEXP)/p" NEWS \
+           | grep -v '^\['; \
+         echo; \
+         echo ChangeLog entries:; \
+         find . -name ChangeLog -maxdepth 2 \
+           | xargs cvs diff -up -r$(prev-cvs-tag) -rHEAD \
+           | sed -n 's/^+//p' \
+           | perl -ne 'm!^\+\+ (\./)?! or print,next;' \
+             -e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
+       )
+
+writable-files:
+       for file in $(distdir).tar.gz $(xd-delta)                       \
+         ../release/$(distdir).tar.gz ../release/$(xd-delta); do       \
+         test -e $$file || continue;                                   \
+         test -w $$file                                                \
+           || { echo ERROR: $$file is not writable; fail=1; };         \
+       done;                                                           \
+       test "$$fail" && exit 1 || :
+
+WGET = wget
+ftp-gnu = ftp://ftp.gnu.org/gnu
+
+define emit-rsync-commands
+       echo =====================================
+       echo =====================================
+       echo 'for host in $(a_host) $(b_host); do \'
+       echo '  rsync -e ssh --pro -av $(xd-delta) $(my_distdir).tar.gz \'
+       echo '    $$host:$(real_dir); done'
+       echo '# send the /tmp/announcement e-mail'
+       echo =====================================
+       echo =====================================
+endef
+
+# Make sure that the copyright date in lib/version-etc.c is up to date.
+check-copyright:
+       @if test -f lib/version-etc.c; then \
+         grep 'N_("Copyright (C) $(shell date +%Y) Free' lib/version-etc.c > 
/dev/null \
+         || { echo 'out of date copyright in $<; update it' 1>&2; exit 1; }; \
+       fi
+
+alpha: writable-files po-check check-copyright
+       $(MAKE) cvs-dist
+       $(MAKE) -s announcement > /tmp/announce-$(my_distdir)
+       ln $(distdir).tar.gz ../release
+       chmod a-w $(distdir).tar.gz
+       cd $(release-archive-dir) \
+         && xdelta delta -9 $(prev-tgz) $(distdir).tar.gz $(xd-delta) || :
+       ln $(release-archive-dir)/$(xd-delta) .
+       chmod a-w $(release-archive-dir)/$(xd-delta)
+       echo $(VERSION) > $(prev_version_file)
+       cvs ci -m. $(prev_version_file)
+       @$(emit-rsync-commands)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]