From: Stefano Lattarini Date: Tue, 31 Jan 2012 07:31:59 +0000 (+0100) Subject: Merge branch 'maint' X-Git-Tag: ng-0.5a~19^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c66523fe55c94b19b5b26e0eae1c8de1d47d0cd;p=thirdparty%2Fautomake.git Merge branch 'maint' * maint: tests: do not assume the object file extension is .o tests: avoid spurious failure of 'transform2.test' on Cygwin tests: avoid spurious failure of deleted-am.test with FreeBSD make tests: avoid possibly undeserved PASS from check8.test warnings: more precise category and message for one warning release: revamp rules to tag and upload the releases amversion: add missing dependency hacking: update advice w.r.t. synced files hacking: don't reference ChangeLog anymore + Extra non-trivial edits: * tests/suffix8.tap: Copy in (by hand) the modifications done to 'suffix8.test' on maint, i.e., the addition of an explicit '.y_.obj:' suffix rule to Makefile.am. --- 3c66523fe55c94b19b5b26e0eae1c8de1d47d0cd diff --cc Makefile.am index 685cbd95c,56784ca5d..a493e3f48 --- a/Makefile.am +++ b/Makefile.am @@@ -158,66 -147,526 +158,103 @@@ ChangeLog: am--changelog-regen-hoo # Ensure tests are world-executable dist-hook: - cd $(distdir)/tests && chmod a+rx *.test - -# Some simple checks, and then ordinary check. These are only really -# guaranteed to work on my machine. -syntax_check_rules = \ -sc_test_names \ -sc_diff_automake_in_automake \ -sc_diff_aclocal_in_automake \ -sc_perl_syntax \ -sc_no_brace_variable_expansions \ -sc_rm_minus_f \ -sc_no_for_variable_in_macro \ -sc_mkinstalldirs \ -sc_pre_normal_post_install_uninstall \ -sc_perl_no_undef \ -sc_perl_no_split_regex_space \ -sc_cd_in_backquotes \ -sc_cd_relative_dir \ -sc_perl_at_uscore_in_scalar_context \ -sc_perl_local_no_parens \ -sc_perl_local \ -sc_AMDEP_TRUE_in_automake_in \ -sc_tests_make_without_am_makeflags \ -sc_tests_plain_make \ -sc_tests_plain_autoconf \ -sc_tests_plain_autoupdate \ -sc_tests_plain_automake \ -sc_tests_plain_autom4te \ -sc_tests_plain_autoheader \ -sc_tests_plain_autoreconf \ -sc_tests_here_document_format \ -sc_tests_Exit_not_exit \ -sc_tests_automake_fails \ -sc_tests_plain_aclocal \ -sc_tests_plain_perl \ -sc_tests_required_after_defs \ -sc_tests_overriding_macros_on_cmdline \ -sc_tests_plain_sleep \ -sc_tests_plain_egrep_fgrep \ -sc_tests_PATH_SEPARATOR \ -sc_mkdir_p \ -sc_perl_at_substs \ -sc_unquoted_DESTDIR \ -sc_tabs_in_texi \ -sc_at_in_texi - -$(syntax_check_rules): automake aclocal -maintainer-check: $(syntax_check_rules) -.PHONY: maintainer-check $(syntax_check_rules) - -## Check that the list of tests given in the Makefile is equal to the -## list of all test scripts in the Automake testsuite. -.PHONY: maintainer-check-list-of-tests -maintainer-check-list-of-tests: - $(am__cd) tests && $(MAKE) $(AM_MAKEFLAGS) $@ -maintainer-check: maintainer-check-list-of-tests - -## Look for test whose names can cause spurious failures when used as -## first argument to AC_INIT (chiefly because they might contain an -## m4/m4sugar builtin or macro name). -m4_builtins = \ - __gnu__ \ - __unix__ \ - bpatsubst \ - bregexp \ - builtin \ - changecom \ - changequote \ - changeword \ - debugfile \ - debugmode \ - decr \ - define \ - defn \ - divert \ - divnum \ - dnl \ - dumpdef \ - errprint \ - esyscmd \ - eval \ - format \ - ifdef \ - ifelse \ - include \ - incr \ - index \ - indir \ - len \ - m4exit \ - m4wrap \ - maketemp \ - mkstemp \ - patsubst \ - popdef \ - pushdef \ - regexp \ - shift \ - sinclude \ - substr \ - symbols \ - syscmd \ - sysval \ - traceoff \ - traceon \ - translit \ - undefine \ - undivert -sc_test_names: - @m4_builtin_rx=`echo $(m4_builtins) | sed 's/ /|/g'`; \ - m4_macro_rx="\\<($$m4_builtin_rx)\\>|\\<_?(A[CUMHS]|m4)_"; \ - if ls tests/*.test | LC_ALL=C grep -E "$$m4_macro_rx"; then \ - echo "the names of the tests above can be problematic" 1>&2; \ - echo "Avoid test names that contain names of m4 macros" 1>&2; \ - exit 1; \ - fi - -## These check avoids accidental configure substitutions in the source. -## There are exactly 9 lines that should be modified from automake.in to -## automake, and 10 lines that should be modified from aclocal.in to -## aclocal; these wors out to 32 and 34 lines of diffs, respectively. -sc_diff_automake_in_automake: - @if test `diff $(srcdir)/automake.in automake | wc -l` -ne 32; then \ - echo "found too many diffs between automake.in and automake" 1>&2; \ - diff -c $(srcdir)/automake.in automake; \ - exit 1; \ - fi -sc_diff_aclocal_in_aclocal: - @if test `diff $(srcdir)/aclocal.in aclocal | wc -l` -ne 34; then \ - echo "found too many diffs between aclocal.in and aclocal" 1>&2; \ - diff -c $(srcdir)/aclocal.in aclocal; \ - exit 1; \ - fi - -## Syntax check with default Perl (on my machine, Perl 5). -sc_perl_syntax: - @perllibdir="./lib$(PATH_SEPARATOR)$(srcdir)/lib" $(PERL) -c -w automake - @perllibdir="./lib$(PATH_SEPARATOR)$(srcdir)/lib" $(PERL) -c -w aclocal - -## expect no instances of '${...}'. However, $${...} is ok, since that -## is a shell construct, not a Makefile construct. -sc_no_brace_variable_expansions: - @if grep -F '$${' $(srcdir)/lib/am/[a-z]*.am | \ - grep -F -v '$$$$'; then \ - echo "Found too many uses of '\$${' in the lines above." 1>&2; \ - exit 1; \ - else :; fi - -## Make sure `rm' is called with `-f'. -sc_rm_minus_f: - @if grep -v '^#' $(srcdir)/lib/am/[a-z]*.am $(srcdir)/tests/*.test | \ - grep -E '\)'; then \ - echo "Suspicious 'rm' invocation." 1>&2; \ - exit 1; \ - else :; fi - -## Never use something like `for file in $(FILES)', this doesn't work -## if FILES is empty or if it contains shell meta characters (e.g. $ is -## commonly used in Java filenames). -sc_no_for_variable_in_macro: - @if grep 'for .* in \$$(' $(srcdir)/lib/am/[a-z]*.am; then \ - echo 'Use "list=$$(mumble); for var in $$$$list".' 1>&2 ; \ - exit 1; \ - else :; fi - -## Make sure all invocations of mkinstalldirs are correct. -sc_mkinstalldirs: - @if grep -n 'mkinstalldirs' $(srcdir)/lib/am/[a-z]*.am | \ - grep -F -v '$$(mkinstalldirs)'; then \ - echo "Found incorrect use of mkinstalldirs in the lines above" 1>&2; \ - exit 1; \ - else :; fi - -## Make sure all calls to PRE/NORMAL/POST_INSTALL/UNINSTALL -sc_pre_normal_post_install_uninstall: - @if grep -E -n '\((PRE|NORMAL|POST)_(|UN)INSTALL\)' \ - $(srcdir)/lib/am/[a-z]*.am | \ - grep -v ':##' | grep -v ': @\$$('; then \ - echo "Found incorrect use of PRE/NORMAL/POST_INSTALL/UNINSTALL in the lines above" 1>&2; \ - exit 1; \ - else :; fi - -## We never want to use "undef", only "delete", but for $/. -sc_perl_no_undef: - @if grep -n -w 'undef ' $(srcdir)/automake.in | \ - grep -F -v 'undef $$/'; then \ - echo "Found undef in automake.in; use delete instead" 1>&2; \ - exit 1; \ - fi - -## We never want split (/ /,...), only split (' ', ...). -sc_perl_no_split_regex_space: - @if grep -n 'split (/ /' $(srcdir)/automake.in; then \ - echo "Found bad split in the lines above." 1>&2; \ - exit 1; \ - fi - -## Look for cd within backquotes -sc_cd_in_backquotes: - @if grep -n '^[^#]*` *cd ' $(srcdir)/automake.in \ - $(srcdir)/lib/am/*.am; then \ - echo "Consider using \$$(am__cd) in the lines above." 1>&2; \ - exit 1; \ - fi - -## Look for cd to a relative directory (may be influenced by CDPATH). -## Skip some known directories that are OK. -sc_cd_relative_dir: - @if grep -n '^[^#]*cd ' $(srcdir)/automake.in \ - $(srcdir)/lib/am/*.am | \ - grep -v 'echo.*cd ' | \ - grep -v 'am__cd =' | \ - grep -v '^[^#]*cd [./]' | \ - grep -v '^[^#]*cd \$$(top_builddir)' | \ - grep -v '^[^#]*cd "\$$\$$am__cwd' | \ - grep -v '^[^#]*cd \$$(abs' | \ - grep -v '^[^#]*cd "\$$(DESTDIR)'; then \ - echo "Consider using \$$(am__cd) in the lines above." 1>&2; \ - exit 1; \ - fi - -## Using @_ in a scalar context is most probably a programming error. -sc_perl_at_uscore_in_scalar_context: - @if grep -Hn '[^@_A-Za-z0-9][_A-Za-z0-9]*[^) ] *= *@_' $(srcdir)/automake.in; then \ - echo "Using @_ in a scalar context in the lines above." 1>&2; \ - exit 1; \ - fi + $(am__cd) $(distdir)/tests && chmod a+rx *.test -## Forbid using parens with `local' to ease counting. -sc_perl_local_no_parens: - @if grep '^[ \t]*local *(' $(srcdir)/automake.in; then \ - echo "Don't use \`local' with parens: use several \`local' above." >&2; \ - exit 1; \ - fi -## Allow only few variables to be localized in Automake. -sc_perl_local: - @if egrep -v '^[ \t]*local \$$[_~]( *=|;)' $(srcdir)/automake.in | \ - grep '^[ \t]*local [^*]'; then \ - echo "Please avoid \`local'." 1>&2; \ - exit 1; \ - fi +# Perl coverage statistics. +PERL_COVERAGE_DB = $(abs_top_builddir)/cover_db +PERL_COVERAGE_FLAGS = -MDevel::Cover=-db,$(PERL_COVERAGE_DB),-silent,on,-summary,off +PERL_COVER = cover -## Don't let AMDEP_TRUE substitution appear in automake.in. -sc_AMDEP_TRUE_in_automake_in: - @if grep '@AMDEP''_TRUE@' $(srcdir)/automake.in; then \ - echo "Don't put AMDEP_TRUE substitution in automake.in" 1>&2; \ - exit 1; \ - fi +check-coverage-run recheck-coverage-run: all + $(mkinstalldirs) $(PERL_COVERAGE_DB) + PERL5OPT="$$PERL5OPT $(PERL_COVERAGE_FLAGS)"; export PERL5OPT; \ + WANT_NO_THREADS=yes; export WANT_NO_THREADS; unset AUTOMAKE_JOBS; \ + $(MAKE) $(AM_MAKEFLAGS) `echo $@ | sed 's/-coverage-run//'` -## Recursive make invocations should always pass $(AM_MAKEFLAGS) -## to $(MAKE), for portability to non-GNU make. -sc_tests_make_without_am_makeflags: - @if grep '^[^#].*(MAKE) ' $(srcdir)/lib/am/*.am $(srcdir)/automake.in |\ - grep -v 'AM_MAKEFLAGS'; then \ - echo 'Use $$(MAKE) $$(AM_MAKEFLAGS).' 1>&2; \ +check-coverage-report: + @if test ! -d "$(PERL_COVERAGE_DB)"; then \ + echo "No coverage database found in \`$(PERL_COVERAGE_DB)'." >&2; \ + echo "Please run \`make check-coverage' first" >&2; \ exit 1; \ fi + $(PERL_COVER) $(PERL_COVER_FLAGS) "$(PERL_COVERAGE_DB)" -## Tests should never call make directly. -sc_tests_plain_make: - @if grep -v '^#' $(srcdir)/tests/*.test | $(EGREP) ':[ ]*make( |$$)'; then \ - echo 'Do not run "make" in the above tests. Use "$$MAKE" instead.' 1>&2; \ - exit 1; \ - fi +# We don't use direct dependencies here because we'd like to be able +# to invoke the report even after interrupted check-coverage. +check-coverage: check-coverage-run + $(MAKE) $(AM_MAKEFLAGS) check-coverage-report -## Tests should never call autoconf directly. -sc_tests_plain_autoconf: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoconf\>'; then \ - echo 'Do not run "autoconf" in the above tests. Use "$$AUTOCONF" instead.' 1>&2; \ - exit 1; \ - fi +recheck-coverage: recheck-coverage-run + $(MAKE) $(AM_MAKEFLAGS) check-coverage-report -## Tests should never call autoupdate directly. -sc_tests_plain_autoupdate: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoupdate\>'; then \ - echo 'Do not run "autoupdate" in the above tests. Use "$$AUTOUPDATE" instead.' 1>&2; \ - exit 1; \ - fi +clean-coverage: + rm -rf "$(PERL_COVERAGE_DB)" +clean-local: clean-coverage -## Tests should never call automake directly. -sc_tests_plain_automake: - @if grep -v '^#' $(srcdir)/tests/*.test | grep -E ':[ ]*automake\>([^:]|$$)'; then \ - echo 'Do not run "automake" in the above tests. Use "$$AUTOMAKE" instead.' 1>&2; \ - exit 1; \ - fi - -## Tests should never call autoheader directly. -sc_tests_plain_autoheader: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoheader\>'; then \ - echo 'Do not run "automake" in the above tests. Use "$$AUTOHEADER" instead.' 1>&2; \ - exit 1; \ - fi - -## Tests should never call autoreconf directly. -sc_tests_plain_autoreconf: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoreconf\>'; then \ - echo 'Do not run "automake" in the above tests. Use "$$AUTORECONF" instead.' 1>&2; \ - exit 1; \ - fi - -## Tests should never call autom4te directly. -sc_tests_plain_autom4te: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autom4te\>'; then \ - echo 'Do not run "automake" in the above tests. Use "$$AUTOM4TE" instead.' 1>&2; \ - exit 1; \ - fi - -## Tests should only use END and EOF for here documents -## (so that the next test is effective). -sc_tests_here_document_format: - @if grep '<<' $(srcdir)/tests/*.test | grep -v 'END' | grep -v 'EOF'; then \ - echo 'Use here documents with "END" and "EOF" only, for greppability.' 1>&2; \ - exit 1; \ - fi - -## Tests should never call exit directly, but use Exit. -## This is so that the exit status is transported correctly across the 0 trap. -## Ignore comments, testsuite self tests, and one perl line in ext2.test. -sc_tests_Exit_not_exit: - @found=false; for file in $(srcdir)/tests/*.test; do \ - case $$file in */self-check-*.test) continue;; esac; \ - res=`sed -n -e '/^#/d; /^\$$PERL/d' -e '/<<.*END/,/^END/b' \ - -e '/<<.*EOF/,/^EOF/b' -e '/exit [$$0-9]/p' $$file`; \ - if test -n "$$res"; then \ - echo "$$file:$$res"; \ - found=true; \ - fi; \ - done; \ - if $$found; then \ - echo 'Do not call plain "exit", use "Exit" instead, in above tests.' 1>&2; \ - exit 1; \ - fi - -## Use AUTOMAKE_fails when appropriate -sc_tests_automake_fails: - @if grep -v '^#' $(srcdir)/tests/*.test | grep '\$$AUTOMAKE.*&&.*[eE]xit'; then \ - echo 'Use AUTOMAKE_fails + grep to catch automake failures in the above tests.' 1>&2; \ - exit 1; \ - fi - -## Tests should never call aclocal directly. -sc_tests_plain_aclocal: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*aclocal\>'; then \ - echo 'Do not run "aclocal" in the above tests. Use "$$ACLOCAL" instead.' 1>&2; \ - exit 1; \ - fi - -## Tests should never call perl directly. -sc_tests_plain_perl: - @if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*perl\>'; then \ - echo 'Do not run "perl" in the above tests. Use "$$PERL" instead.' 1>&2; \ - exit 1; \ - fi - -## Setting `required' after sourcing `./defs' is a bug. -sc_tests_required_after_defs: - @for file in $(srcdir)/tests/*.test; do \ - if out=`sed -n '/defs/,$${/required=/p;}' $$file`; test -n "$$out"; then \ - echo 'Do not set "required" after sourcing "defs" in '"$$file: $$out" 1>&2; \ - exit 1; \ - fi; \ - done - -## Overriding a Makefile macro on the command line is not portable when -## recursive targets are used. Better use an envvar. SHELL is an -## exception, POSIX says it can't come from the environment. V, DESTDIR, -## DISTCHECK_CONFIGURE_FLAGS and DISABLE_HARD_ERRORS are exceptions, too, -## as package authors are urged not to initialize them anywhere. -sc_tests_overriding_macros_on_cmdline: - @if grep -E '\$$MAKE .*(SHELL=.*=|=.*SHELL=)' $(srcdir)/tests/*.test; then \ - echo 'Rewrite "$$MAKE foo=bar SHELL=$$SHELL" as "foo=bar $$MAKE -e SHELL=$$SHELL"' 1>&2; \ - echo ' in the above lines, it is more portable.' 1>&2; \ - exit 1; \ - fi -## Also try to account for usages like "$MAKE || st=$?". - @if sed -e 's/ || .*//' -e 's/ && .*//' \ - -e 's/ DESTDIR=[^ ]*/ /' -e 's/ SHELL=[^ ]*/ /' \ - -e 's/ V=[^ ]*/ /' -e 's/ DISABLE_HARD_ERRORS=[^ ]*/ /' \ -## DISTCHECK_CONFIGURE_FLAGS is allowed to contain whitespace in its -## definition, so the more complex substitutions below. - -e "s/ DISTCHECK_CONFIGURE_FLAGS='[^']*'/ /" \ - -e 's/ DISTCHECK_CONFIGURE_FLAGS="[^"]*"/ /' \ - -e 's/ DISTCHECK_CONFIGURE_FLAGS=[^ ]/ /' \ - $(srcdir)/tests/*.test | grep '\$$MAKE .*='; then \ - echo 'Rewrite "$$MAKE foo=bar" as "foo=bar $$MAKE -e" in the above lines,' 1>&2; \ - echo 'it is more portable.' 1>&2; \ - exit 1; \ - fi - @if grep 'SHELL=.*\$$MAKE' $(srcdir)/tests/*.test; then \ - echo '$$MAKE ignores the SHELL envvar, use "$$MAKE SHELL=$$SHELL" in' 1>&2; \ - echo 'the above lines.' 1>&2; \ - exit 1; \ - fi - -## Never use `sleep 1' to create files with different timestamps. -## Use `$sleep' instead. Some filesystems (e.g., Windows') have only -## a 2sec resolution. -sc_tests_plain_sleep: - @if grep -E '\bsleep +[12345]\b' $(srcdir)/tests/*.test; then \ - echo 'Do not use "sleep x" in the above tests. Use "$$sleep" instead.' 1>&2; \ - exit 1; \ - fi - -## fgrep and egrep are not required by POSIX. -sc_tests_plain_egrep_fgrep: - @if grep -E '\b[ef]grep\b' $(srcdir)/tests/*.test ; then \ - echo 'Do not use egrep or fgrep in test cases. Use $$FGREP or $$EGREP.' 1>&2; \ - exit 1; \ - fi - @if grep -E '\b[ef]grep\b' $(srcdir)/lib/am/*.am $(srcdir)/m4/*.m4; then \ - echo 'Do not use egrep or fgrep in the above files, they are not portable.' 1>&2; \ - exit 1; \ - fi - -## Using `:' as a PATH separator is not portable. -sc_tests_PATH_SEPARATOR: - @if grep -E '\bPATH=.*:.*' $(srcdir)/tests/*.test ; then \ - echo "Use \`\$$PATH_SEPARATOR', not \`:', in PATH definitions above." 1>&2; \ - exit 1; \ - fi - -sc_mkdir_p: - @if grep 'mkdir_p' $(srcdir)/automake.in \ - $(srcdir)/lib/am/*.am $(srcdir)/tests/*.test; then \ - echo 'Do not use mkdir_p in the above files, use MKDIR_P.' 1>&2; \ - exit 1; \ - fi - -## Try to make sure all @...@ substitutions are covered by our -## substitution rule. -sc_perl_at_substs: - @if test `grep -E '^[^#]*@[A-Za-z_0-9]+@' aclocal | wc -l` -ne 0; then \ - echo "Unresolved @...@ substitution in aclocal" 1>&2; \ - exit 1; \ - fi - @if test `grep -E '^[^#]*@[A-Za-z_0-9]+@' automake | wc -l` -ne 0; then \ - echo "Unresolved @...@ substitution in automake" 1>&2; \ - exit 1; \ - fi - -sc_unquoted_DESTDIR: - @if grep -E "[^\'\"]\\\$$\(DESTDIR" $(srcdir)/lib/am/*.am; then \ - echo 'Suspicious unquoted DESTDIR uses.' 1>&2 ; \ - exit 1; \ - fi - -sc_tabs_in_texi: - @if grep ' ' $(srcdir)/doc/automake.texi; then \ - echo 'Do not use tabs in the manual.' 1>&2; \ - exit 1; \ - fi - -sc_at_in_texi: - @if grep -E '([^@]|^)@([ ][^@]|$$)' $(srcdir)/doc/automake.texi; \ - then \ - echo 'Unescaped @.' 1>&2; \ - exit 1; \ - fi +.PHONY: check-coverage recheck-coverage check-coverage-run \ + recheck-coverage-run check-coverage-report clean-coverage - git-dist: maintainer-check - ## Make sure the NEWS file is up-to-date. - @if sed 1q $(srcdir)/NEWS | grep -e "$(VERSION)" > /dev/null; then :; else \ - echo "NEWS not updated; not releasing" 1>&2; \ - exit 1; \ - fi - ## Build the distribution. We expect the developer to have already run - ## "make check" and "make distcheck" on his own (as required in the - ## HACKING file, section "Release procedure"). - $(MAKE) $(AM_MAKEFLAGS) dist - ## Finally, if anything was successful, commit the last changes and tag - ## the release in the repository. We don't use RCS keywords so it's OK - ## to distribute the files before they were committed. - $(am__cd) $(srcdir) && git commit -a -s && \ - git tag -s "v$(VERSION)" -m "Release $(VERSION)" - - git-release: git-dist - case $(VERSION) in \ - *[a-z]) dest=alpha;; \ - *) dest=ftp;; \ + ## Tagging and/or uploading stable and beta releases. + + GIT = git + + version_rx = ^[1-9][0-9]*\.[0-9][0-9]*(\.[0-9][0-9]*)? + stable_version_rx = $(version_rx)$$ + beta_version_rx = $(version_rx)[bdfhjlnprtvxz]$$ + match_version = echo "$(VERSION)" | $(EGREP) >/dev/null + + ## Check that we don't have uncommitted or unstaged changes. + ## TODO: Maybe the git suite already offers a shortcut to verify if the + ## TODO: working directory is "clean" or not? If yes, use that instead + ## TODO: of duplicating the logic here. + git_must_have_clean_workdir = \ + $(GIT) rev-parse --verify HEAD >/dev/null \ + && $(GIT) update-index -q --refresh \ + && $(GIT) diff-files --quiet \ + && $(GIT) diff-index --quiet --cached HEAD \ + || fatal "you have uncommitted or unstaged changes" + + determine_release_type = \ + if $(match_version) '$(stable_version_rx)'; then \ + release_type='Release' dest=ftp; \ + elif $(match_version) '$(beta_version_rx)'; then \ + release_type='Beta release' dest=alpha; \ + else \ + fatal "invalid version '$(VERSION)' for a release"; \ + fi + + git-tag-release: maintainer-check + @set -e; set -u; \ + fatal () { echo "$@: $$*; not tagging" >&2; exit 1; }; \ + case '$(AM_TAG_DRYRUN)' in \ + ""|[nN]|[nN]o|NO) run="";; \ + *) run="echo Running:";; \ esac; \ - $(srcdir)/lib/gnupload $(GNUPLOADFLAGS) \ - --to $$dest.gnu.org:automake $(DIST_ARCHIVES) + $(determine_release_type); \ + $(git_must_have_clean_workdir); \ + ## Make sure the NEWS file is up-to-date. + sed 1q $(srcdir)/NEWS | grep '$(VERSION)' >/dev/null \ + || fatal "NEWS not updated"; \ + ## If all was successful, tag the release in the local repository. + $$run $(GIT) tag -s "v$(VERSION)" -m "$$release_type $(VERSION)" + + git-upload-release: + @set -e; set -u; \ + fatal () { echo "$@: $$*; not releasing" >&2; exit 1; }; \ + $(determine_release_type); \ + dest=$$dest.gnu.org:automake; \ + $(git_must_have_clean_workdir); \ + ## Check that we are releasing from a valid tag. + tag=`$(GIT) describe` \ + && case $$tag in "v$(VERSION)") true;; *) false;; esac \ + || fatal "you can only create a release from a tagged version"; \ + ## Build and upload the distribution tarball(s). + $(MAKE) $(AM_MAKEFLAGS) dist || exit 1; \ + echo Will upload to $$dest: $(DIST_ARCHIVES); \ + $(srcdir)/lib/gnupload $(GNUPLOADFLAGS) --to $$dest $(DIST_ARCHIVES) + + .PHONY: git-upload-release git-tag-release ## Visually comparing differences between the Makefile.in files in ## automake's own build system as generated in two different branches diff --cc tests/specflg7.test index 60c1a9d4c,e41b31695..da062d951 --- a/tests/specflg7.test +++ b/tests/specflg7.test @@@ -1,5 -1,5 +1,5 @@@ #! /bin/sh - # Copyright (C) 2002, 2004, 2011 Free Software Foundation, Inc. -# Copyright (C) 2002, 2004, 2012 Free Software Foundation, Inc. ++# Copyright (C) 2002, 2004, 2011, 2012 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 @@@ -57,7 -59,6 +57,9 @@@ $AUTOMAKE - $MAKE ./true | grep true ./false | grep false - test -f ./t-false.o - test -f ./f-false.o ++ + objext=`sed -n -e 's/^OBJEXT = //p' < Makefile` + test -f ./t-false.$objext + test -f ./f-false.$objext + +: diff --cc tests/suffix8.tap index 8a819a967,000000000..3e37eccb8 mode 100755,000000..100755 --- a/tests/suffix8.tap +++ b/tests/suffix8.tap @@@ -1,92 -1,0 +1,94 @@@ +#! /bin/sh +# Copyright (C) 2002, 2003, 2010, 2011 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, see . + +# Test to make sure Automake supports multiple derivations for the +# same suffix. +# From PR/37. + +required='cc libtoolize' +. ./defs || Exit 1 + +plan_ 10 + +cat >>configure.in <<'END' +AM_PROG_AR +AM_PROG_LIBTOOL +AC_OUTPUT +END + +cat >Makefile.am << 'END' +# $(LINK) is not defined automatically by Automake, since the *_SOURCES +# variables don't contain any known extension (.c, .cc, .f ...), +# So we need this hack. +LINK = : + +bin_PROGRAMS = foo +lib_LTLIBRARIES = libfoo.la + +foo_SOURCES = foo.x_ +libfoo_la_SOURCES = bar.x_ + +# The elaborate cp commands below account for VPATH issues on +# weaker make implementations (e.g. IRIX 6.5). +.x_.y_: + cp `test -f '$<' || echo $(srcdir)/`$< $@ +.y_.o: + cp `test -f '$<' || echo $(srcdir)/`$< $@ ++.y_.obj: ++ cp `test -f '$<' || echo $(srcdir)/`$< $@ +.y_.z_: + cp `test -f '$<' || echo $(srcdir)/`$< $@ +.z_.lo: + cp `test -f '$<' || echo $(srcdir)/`$< $@ + +# Some make implementations don't remove intermediate files +# automatically, thus causing "make distcheck" to fail if +# this is not added. +MOSTLYCLEANFILES = *.y_ *.z_ + +.PHONY: test0 test1 test2 +test0: + echo $(foo_OBJECTS) | grep '^foo\.foo$$' + echo $(libfoo_la_OBJECTS) | grep '^bar\.lo$$' +test1: + echo $(foo_OBJECTS) | grep '^foo\.$(OBJEXT)$$' + echo $(libfoo_la_OBJECTS) | grep '^bar\.lo$$' +test2: $(foo_OBJECTS) $(libfoo_la_OBJECTS) + test -f foo.$(OBJEXT) + test -f bar.lo +check-local: test1 test2 +END + +echo 'int main (void) { return 0; }' > foo.x_ +echo 'int bar (void) { return 0; }' > bar.x_ + +command_ok_ "libtoolize" libtoolize +command_ok_ "aclocal" $ACLOCAL +command_ok_ "autoconf" $AUTOCONF +command_ok_ "automake" $AUTOMAKE -a +command_ok_ "configure" ./configure +command_ok_ "make test0" env OBJEXT=foo $MAKE -e test0 +command_ok_ "make test1" $MAKE test1 + +directive=''; make_can_chain_suffix_rules || directive=TODO + +for target in test2 all distcheck; do + command_ok_ "make $target" \ + -D "$directive" -r "suffix rules not chained" \ + $MAKE $target +done + +: diff --cc tests/transform2.test index 010ca4013,07943bc9a..a7dd9f9b5 --- a/tests/transform2.test +++ b/tests/transform2.test @@@ -1,5 -1,5 +1,5 @@@ #! /bin/sh - # Copyright (C) 2002, 2003, 2004, 2007, 2008, 2011 Free Software -# Copyright (C) 2002, 2003, 2004, 2007, 2008, 2012 Free Software ++# Copyright (C) 2002, 2003, 2004, 2007, 2008, 2011, 2012 Free Software # Foundation, Inc. # # This program is free software; you can redistribute it and/or modify