a2ps-commit
[Top][All Lists]
Advanced

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

CVS: a2ps GNUmakefile,NONE,1.1.2.1 Makefile.maint,NONE,1.1.2.1 HACKING,N


From: Akim Demaille <address@hidden>
Subject: CVS: a2ps GNUmakefile,NONE,1.1.2.1 Makefile.maint,NONE,1.1.2.1 HACKING,NONE,1.1.2.1
Date: Tue, 01 Apr 2003 03:03:12 -0500

Update of /cvsroot/a2ps/a2ps
In directory subversions:/tmp/cvs-serv21030

Added Files:
      Tag: a2ps-4-1x
        GNUmakefile Makefile.maint HACKING 
Log Message:
New.


--- NEW FILE ---
# 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:

--- NEW FILE ---
# -*-Makefile-*-
# This Makefile fragment is shared between fileutils, sh-utils, textutils,
# CPPI, Bison, and Autoconf.

## Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2, or (at your option)
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
## 02111-1307, USA.

# Do not save the original name or timestamp in the .tar.gz file.
GZIP_ENV = '--no-name --best'

CVS = cvs

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)

# Old releases are stored here.
# Used for diffs and xdeltas.
release_archive_dir ?= ../release



## --------------- ##
## Sanity checks.  ##
## --------------- ##

# Checks that don't require cvs.
# Run `changelog-check' last, as previous test may reveal problems requiring
# new ChangeLog entries.
local-check = \
  po-check copyright-check writable-files m4-check author_mark_check \
  changelog-check strftime-check header-check
.PHONY: $(local-check)

# Make sure C source files in src/ don't include xalloc.h directly,
# since they all already include it via sys2.h.
# It's not a big deal -- just aesthetics.
header-check:
        if test -f $(srcdir)/src/sys2.h; then                           \
          if grep 'xalloc\.h' $(srcdir)/src/*.c; then                   \
            exit 1;                                                     \
          fi;                                                           \
        fi

# Ensure that date's --help output stays in sync with the info
# documentation for GNU strftime.  The only exception is %N,
# which date accepts but GNU strftime does not.
extract_char = sed 's/^[^%][^%]*%\(.\).*/\1/'
strftime-check:
        if test -f $(srcdir)/src/date.c; then                           \
          grep '^  %.  ' $(srcdir)/src/date.c | sort                    \
            | $(extract_char) > address@hidden;                                 
\
          { echo N;                                                     \
            info libc date calendar format | grep '^    `%.'\'          \
              | $(extract_char); } | sort > address@hidden;                     
\
          diff -u address@hidden address@hidden || exit 1;                      
        \
          rm -f address@hidden address@hidden;                                  
        \
        fi

changelog-check:
        if head ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
          :; \
        else \
          echo "$(VERSION) not in ChangeLog" 1>&2; \
          exit 1; \
        fi

m4-check:
        @grep 'AC_DEFUN([^[]' m4/*.m4 \
          && { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
               exit 1; } || :

# 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; \
          files=; \
          for file in lib/*.[chly] src/*.[chly]; do \
            case $$file in \
            *.[ch]) \
              base=`expr " $$file" : ' \(.*\)\..'`; \
              { test -f $$base.l || test -f $$base.y; } && continue;; \
            esac; \
            files="$$files $$file"; \
          done; \
          grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort > address@hidden; \
          diff -u address@hidden address@hidden || exit 1; \
          rm -f address@hidden address@hidden; \
        fi

# In a definition of #define AUTHORS "... and ..." where the RHS contains
# the English word `and', the string must be marked with `N_ (...)' so that
# gettext recognizes it as a string requiring translation.
author_mark_check:
        @grep '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
          { echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
            exit 1; } || :

# Check that `make alpha' will not fail at the end of the process.
writable-files:
        if test -d $(release_archive_dir); then :; else                 \
          mkdir $(release_archive_dir);                                 \
        fi
        for file in $(distdir).tar.gz $(xd-delta)                       \
                    $(release_archive_dir)/$(distdir).tar.gz            \
                    $(release_archive_dir)/$(xd-delta); do              \
          test -e $$file || continue;                                   \
          test -w $$file                                                \
            || { echo ERROR: $$file is not writable; fail=1; };         \
        done;                                                           \
        test "$$fail" && exit 1 || :

v_etc_file = lib/version-etc.c
# Make sure that the copyright date in $(v_etc_file) is up to date.
copyright-check:
        @if test -f $(v_etc_file); then \
          grep '"Copyright (C) $(shell date +%Y) Free' $(v_etc_file) \
            >/dev/null \
          || { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
               exit 1; }; \
        fi


# Sanity checks with the CVS repository.
cvs-tag-check:
        echo $(this-cvs-tag); \
        if $(CVS) -n log -h README | grep -e $(this-cvs-tag): >/dev/null; then \
          echo "$(this-cvs-tag) as already been used; not tagging" 1>&2; \
          exit 1; \
        else :; fi

cvs-diff-check:
        if $(CVS) diff >cvs-diffs; then                         \
          rm cvs-diffs;                                         \
        else                                                    \
          echo "Some files are locally modified:" 1>&2;         \
          cat cvs-diffs;                                        \
          exit 1;                                               \
        fi

cvs-check: cvs-diff-check cvs-tag-check

maintainer-distcheck: changelog-check
        $(MAKE) distcheck
        $(MAKE) my-distcheck


# 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: $(local-check) cvs-check maintainer-distcheck
        $(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: $(local-check)
        -rm -rf $(t)
        mkdir $(t)
        GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
        cd $(t)/$(distdir) \
          && ./configure --disable-nls \
          && $(MAKE) CFLAGS='-Wformat -Werror' \
              AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
          && $(MAKE) dvi \
          && $(MAKE) check \
          && $(MAKE) distclean
        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 "========================"

WGET = wget
WGETFLAGS = -C off

tgz-md5 = $(shell md5sum < $(my_distdir).tar.gz|sed 's/  -//')
tgz-sha1 = $(shell sha1sum < $(my_distdir).tar.gz|sed 's/  -//')
bz2-md5 = $(shell md5sum < $(my_distdir).tar.bz2|sed 's/  -//')
bz2-sha1 = $(shell sha1sum < $(my_distdir).tar.bz2|sed 's/  -//')
xdelta-md5 = $(shell md5sum < $(xd-delta)|sed 's/  -//')
xdelta-sha1 = $(shell sha1sum < $(xd-delta)|sed 's/  -//')
tgz-size = $(shell du --human $(my_distdir).tar.gz|sed 's/\([MkK]\).*/ \1B/')
bz2-size = $(shell du --human $(my_distdir).tar.bz2|sed 's/\([MkK]\).*/ \1B/')
xd-size = $(shell du --human $(xd-delta)|sed 's/\([MkK]\).*/ \1B/')

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) $(WGETFLAGS) -q --output-document=$$tarz $(url); \
        echo "$(md5)  -" > $$md5_tmp; \
        md5sum -c $$md5_tmp < $$tarz

prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta

news-r1 = /^[^ ].*$(THIS_VERSION_REGEXP)[]:]/
news-r2 = /^[^ ].*$(PREV_VERSION_REGEXP)[]:]/

rel-files = $(xd-delta) $(distdir).tar.bz2 $(distdir).tar.gz
announcement: NEWS ChangeLog $(rel-files)
        @( \
          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   ($(tgz-size))"; \
            echo "  $$url/$(my_distdir).tar.bz2  ($(bz2-size))"; \
          done; \
          echo; \
          echo And here are xdelta-style diffs; \
          echo; \
          for url in $(url_dir_list); do \
            echo "  $$url/$(xd-delta)   ($(xd-size))"; \
          done; \
          echo; \
          echo "Here are the MD5 and SHA1 signatures:"; \
          echo; \
          echo "$(tgz-md5)  $(my_distdir).tar.gz"; \
          echo "$(bz2-md5)  $(my_distdir).tar.bz2"; \
          echo "$(xdelta-md5)  $(xd-delta)"; \
          echo "$(tgz-sha1)  $(my_distdir).tar.gz"; \
          echo "$(bz2-sha1)  $(my_distdir).tar.bz2"; \
          echo "$(xdelta-sha1)  $(xd-delta)"; \
          echo; \
          echo NEWS:; \
          sed -n "$(news-r1),$(news-r2)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"'; \
        )


## ---------------- ##
## Updating files.  ##
## ---------------- ##

ftp-gnu = ftp://ftp.gnu.org/gnu

# Use mv, if you don't have/want move-if-change.
move_if_change ?= move-if-change


# --------------------- #
# Updating everything.  #
# --------------------- #

.PHONY: update
local_updates ?= wget-update cvs-update po-update
update: $(local_updates)


# ------------------- #
# Updating PO files.  #
# ------------------- #

po_repo = http://www.iro.umontreal.ca/contrib/po/maint/$(PACKAGE)
.PHONY: do-po-update po-update
do-po-update:
        tmppo=/tmp/$(PACKAGE)-$(VERSION)-po &&\
        rm -rf $$tmppo && \
        mkdir $$tmppo && \
        (cd $$tmppo && $(WGET) $(WGETFLAGS) -r -l1 -nd --no-parent -A '*.po' 
$(po_repo)) &&\
        cp $$tmppo/*.po po
        cd po && $(MAKE) update-po
        $(MAKE) po-check

po-update:
        if test -d "po"; then \
          $(MAKE) do-po-update; \
        fi

# -------------------------- #
# Updating GNU build tools.  #
# -------------------------- #

# The following pseudo table associates a local directory and a URL
# with each of the files that belongs to some other package and is
# regularly updated from the specified URL.
wget_files ?= $(srcdir)/config/config.guess \
              $(srcdir)/config/config.sub \
              $(srcdir)/src/ansi2knr.c \
              $(srcdir)/config/texinfo.tex
get-targets = $(patsubst %, get-%, $(wget_files))

config.guess-url_prefix = $(ftp-gnu)/config/
config.sub-url_prefix = $(ftp-gnu)/config/

ansi2knr.c-url_prefix = ftp://ftp.cs.wisc.edu/ghost/

texinfo.tex-url_prefix = $(ftp-gnu)/texinfo/

standards.texi-url_prefix = $(ftp-gnu)/GNUinfo/
make-stds.texi-url_prefix = $(ftp-gnu)/GNUinfo/

target = $(patsubst get-%, %, $@)
url = $($(notdir $(target))-url_prefix)$(notdir $(target))

.PHONY: $(get-targets)
$(get-targets):
        $(WGET) $(WGETFLAGS) $(url) -O $(target).t \
          && $(move_if_change) $(target).t $(target)

cvs_files ?= $(srcdir)/config/depcomp $(srcdir)/config/missing 
$(srcdir)/config/mkinstalldirs \
             $(srcdir)/config/install-sh $(srcdir)/src/ansi2knr.c
automake_repo=:pserver:anoncvs:address@hidden:/cvs/automake
.PHONY: wget-update
wget-update: $(get-targets)

.PHONY: cvs-update
cvs-update:
        for f in $(cvs_files); do                                     \
          test -f $$f || { echo "*** skipping $$f" 1>&2; continue; }; \
          file=`basename $$f`;                                        \
          echo checking out $$file...;                                \
          $(CVS) -d $(automake_repo) co -p automake/lib/$$file> $$f.t \
            && $(move_if_change) $$f.t $$f;                           \
        done

define emit-upload-commands
        echo =====================================
        echo =====================================
        echo upload $(PACKAGE) $(PREV_VERSION) $(VERSION)
        echo '# send the /tmp/announcement e-mail'
        echo =====================================
        echo =====================================
endef

$(xd-delta): $(release_archive_dir)/$(prev-tgz) $(distdir).tar.gz
        xdelta delta -9 $^ $@ || :

alpha: $(local-check)
        $(MAKE) cvs-dist
        $(MAKE) $(xd-delta)
        $(MAKE) -s announcement > /tmp/announce-$(my_distdir)
        ln $(rel-files) $(release_archive_dir)
        chmod a-w $(rel-files)
        echo $(VERSION) > $(prev_version_file)
        $(CVS) ci -m. $(prev_version_file)
        @$(emit-upload-commands)

--- NEW FILE ---
-*- outline -*-

This file attempts to describe the rules to use when hacking A2ps.
Don't put this file into the distribution.  Don't mention it in the
ChangeLog.

Everything related to the development of A2ps is on Savannah:

        http://savannah.gnu.org/projects/a2ps/


* Administrivia

** If you incorporate a change from somebody on the net:
First, if it is a large change, you must make sure they have signed
the appropriate paperwork.  Second, be sure to add their name and
email address to THANKS.

** If a change fixes a test, mention the test in the ChangeLog entry.

** Bug reports
If somebody reports a new bug, mention his name in the ChangeLog entry
and in the test case you write.  Put him into THANKS.

The correct response to most actual bugs is to write a new test case
which demonstrates the bug.  Then fix the bug, re-run the test suite,
and check everything in.


* Hacking

** Visible changes
Which include serious bug fixes, must be mentioned in NEWS.

** Translations
Only user visible strings are to be translated: error messages, bits
of the .output file etc.  This excludes impossible error messages
(comparable to assert/abort), and all the --trace output which is
meant for the maintainers only.


* Test suite

** make check
Use liberally.

** Release checks
Try to run the test suite with more severe conditions before a
release:

- Change tests/atlocal/CFLAGS to add your preferred options.  For
  instance, `-traditional' to check that the parsers are K&R.  Note
  that it does not make sense for glr.c, which should be ANSI,
  but currently is actually GNU C, nor for lalr1.cc, which anyway is
  not exercised yet in the test suite.


* Release Procedure

** Tests
See above.

** Update the foreign files
Running `make update' in the top level should make it all for you.
This covers PO files too.  Beware that it happens that some PO files
contain serious problems and are rejected by recent Gettext releases:
fix them all, and complain to the Translation Project!

Note that there might be *new* PO files.  Don't forget to update the
whole machinery, which not only includes LINGUAS, but `cvs add'ing the
PO files too.

** Update NEWS
The version number, *and* the date of the release (including for
betas).

** Update ChangeLog
Should have an entry similar to `Version 1.49b.'.
Check all this in once `make distcheck' passes.

** make alpha
Running `make alpha' is absolutely perfect for beta releases: it makes
the tarballs, the xdeltas, and prepares (in /tmp/) a proto
announcement.  It is so neat, that that's what I use anyway for
genuine releases, but adjusting things by hand (e.g., the urls in the
announcement file, the ChangeLog which is not needed etc.).

If it fails, you're on your own...

It requires GNU Make.

** Upload
Put the tarballs/xdeltas where they should be.  Or put it somewhere,
and send the URL to address@hidden

** Bump the version number
In configure.ac.  Run `make', check this in.

** Announce
Complete/fix the announcement file, and send it at least to
address@hidden (if a real release, or a ``serious beta''),
address@hidden, and address@hidden

Send the same announcement on the comp.compilers newsgroup.  Do not
make any Cc as the moderator will throw away anything cross-posted or
Cc'ed.  It really needs to be a separate message.


-----

Copyright (C) 2003 Free Software Foundation, Inc.

This file is part of GNU A2ps.

GNU A2ps is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU A2ps is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU A2ps; see the file COPYING.  If not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.





reply via email to

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